docker-compose 不显示对代码的任何更改

问题描述 投票:0回答:6

我正在做一个使用

docker-compose up
启动和运行的项目。我对 docker-compose 不是很熟悉,我在文档中找不到真正的答案。根据文档,
up
命令从 docker 文件重建容器,但这似乎没有发生。

当我尝试添加

print
命令进行调试时,没有任何反应。该程序已经抛出了一些打印命令,我尝试更改这些命令以确保它们始终打印相同。我是否必须在
up
命令中添加一些内容才能重建容器?

docker-compose/yml:

dockbrato:
  build: .
  volumes:
    - "/sys:/sys"
    - "/var/run/docker.sock:/var/run/docker.sock"
docker docker-compose
6个回答
62
投票

据我所知,

docker-compose up
只构建不存在的图像;它不会重建源已更改的图像。如果你想重建你的形象,运行
docker-compose build
之前
docker-compose up
.


18
投票

要在源更改后强制重建图像,请使用

--build
标志:

docker-compose up --build

将在更改层之后重建所有层。对于更改之前的层,docker 使用缓存版本。

这避免了必须根据@jwodder 的回答使用两个单独的命令。


10
投票

你可以使用

$ docker-compose build --no-cache
$ docker-compose up --force-recreate

取自 https://vsupalov.com/docker-compose-runs-old-containers/


1
投票

我在 CentOS 7 上的 Docker 1.3 版和 Docker Compose 1.22 版也遇到了类似的问题。我可以通过升级到 Docker 18.06 版来解决问题。为此,我采取了以下步骤。首先,我通过运行以下命令删除了旧版本的 Docker:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \

然后,我设置所需的存储库:

sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

最后安装最新的 CE 版本:

sudo yum install docker-ce

升级 Docker 后,我通过运行以下命令删除了基于旧版本 Docker 构建的容器:

sudo docker container rm -f -v my_container_1 my_container_2

运行

docker-compose up
重建容器。之后改代码成功体现在想要的容器中


0
投票

似乎很多人不了解构建期间添加/复制和更改已安装卷之间的区别。如果已安装的卷中的更改似乎停止同步,我将停止容器并使用以下命令重新启动它:

docker-compose stop <container>
docker-compose up -Vd <container>

重新创建卷而不是重新加载卷


0
投票

如果我们希望应用我们的更改,我们不需要每次都运行

docker-compose up --build
。使用 volume,我们可以在 dev 目录(进行更改的地方)和 docker 容器内的 dir 之间设置绑定。

例子: 在我的文件系统中,我项目的工作目录是

/home/user/frontend
,容器内部是
home/node/app
。我需要做的就是像这样设置一个合适的映射:

volumes:
  - /home/user/frontend:/home/node/app

Docker 将动态地从您的工作目录中获取更改。

(Windows 用户应该使用 wsl 和一些 disto 来使其工作)

© www.soinside.com 2019 - 2024. All rights reserved.