docker-compose.yml中定义了服务范围。这些服务已经启动。我只需要重新构建其中一个,并在不启动其他服务的情况下启动它。
执行如下命令:
docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it is still running !!!
docker-compose build --no-cache nginx
docker-compose up -d --no-deps # link nginx to other services
最后,我得到了旧的nginx容器。
Docker-compose不会杀死所有正在运行的容器!
问题是:
$ docker-compose stop nginx
没有工作(你说它还在运行)。如果你无论如何都要重建它,你可以尝试杀死它:
$ docker-compose kill nginx
如果它仍然不工作,尝试直接用docker停止它:
$ docker stop nginx
或者删除它
$ docker rm -f nginx
如果这仍然不起作用,检查docker版本,您可能需要升级。
这可能是一个错误,你可以检查一个是否匹配你的系统/版本。以下是一些例子:
https://github.com/docker/docker/issues/10589
https://github.com/docker/docker/issues/12738
作为一种解决方案,您可以尝试终止该进程。
$ ps aux | grep docker
$ kill 225654 # example process id
docker-compose上升1.19
docker-compose up --build --force-recreate --no-deps [-d] [<service_name>..]
如果没有一个或多个service_name参数,所有映像都将被构建,所有容器都将被重新创建。
从帮助菜单
Options:
-d, --detach Detached mode: Run containers in the background,
print new container names. Incompatible with
--abort-on-container-exit.
--no-deps Don't start linked services.
--force-recreate Recreate containers even if their configuration
and image haven't changed.
--build Build images before starting containers.
没有缓存
为了强制重建忽略缓存层,我们必须首先构建一个新映像
docker-compose build --no-cache [<service_name>..]
从帮助菜单
Options:
--force-rm Always remove intermediate containers.
-m, --memory MEM Set memory limit for the build container.
--no-cache Do not use cache when building the image.
--no-rm Do not remove intermediate containers after a successful build.
然后重新创建容器
docker-compose up --force-recreate --no-deps [-d] [<service_name>..]
正如@HarlemSquirrel所述,这是最好的,我认为是正确的解决方案。
但是,为了回答OP特定的问题,它应该类似于下面的命令,因为他不想在docker-compose中重新创建所有服务。Yml文件,但只有nginx文件:
docker-compose up -d --force-recreate --no-deps --build nginx
方案描述:
Options:
-d Detached mode: Run containers in the background,
print new container names. Incompatible with
--abort-on-container-exit.
--force-recreate Recreate containers even if their configuration
and image haven't changed.
--build Build images before starting containers.
--no-deps Don't start linked services.