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不会杀死所有正在运行的容器!
正如@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.
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>..]