我正在开发一个使用docker-compose up
启动和运行的项目。我对docker-compose不太熟悉,我无法在文档中找到答案。根据文档,up
命令从docker文件重建容器,但这似乎不会发生。
当我尝试添加print
命令进行调试时,没有任何反应。该程序已经抛出了一些打印命令,我尝试更改这些命令,并且它们总是打印相同的。我是否必须在up
命令中添加一些内容才能使容器重建?
搬运工-撰写/ YML:
dockbrato:
build: .
volumes:
- "/sys:/sys"
- "/var/run/docker.sock:/var/run/docker.sock"
答案 0 :(得分:7)
据我所知,docker-compose up
只构建不存在的图像;它不会重建源已更改的图像。如果您想重建图片,请在docker-compose build
之前运行docker-compose up
。
答案 1 :(得分:3)
要在源更改后强制重建映像,请使用 --build
标志:
docker-compose up --build
将在具有更改的图层之后重建所有图层。对于更改前的图层,docker 使用缓存版本。
这避免了必须按照@jwodder 的回答使用两个单独的命令。
答案 2 :(得分:3)
你可以使用
$ docker-compose build --no-cache
$ docker-compose up --force-recreate
答案 3 :(得分:0)
在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
重建了容器。之后,更改代码成功地反映在所需的容器中。
答案 4 :(得分:0)
似乎很多人在构建过程中的 ADD/COPY 和对已安装卷的更改之间没有区别。如果已安装卷中的更改似乎停止同步,我会停止容器并使用以下命令重新启动它:
docker-compose stop <container>
docker-compose up -Vd <container>
它重新创建卷而不是重新加载它们