如何在docker-compose.yml中重建docker容器?

时间:2016-04-27 08:57:51

标签: docker docker-compose docker-container

docker-compose.yml中定义了一系列服务。这些服务已经开始。我只需要重建其中一个并在没有其他服务的情况下启动它。 我运行以下命令:

docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it still running !!!
docker-compose build --no-cache nginx 
docker-compose up -d --no-deps # link nginx to other services

最后我得到了旧的nginx容器。 顺便说一句,docker-compose并没有杀死所有正在运行的容器!

10 个答案:

答案 0 :(得分:133)

docker-compose up

$docker-compose up -d --no-deps --build <service_name>
  

- no-deps - 不要启动链接服务。

     

- build - 在启动容器之前构建映像。

答案 1 :(得分:76)

使用docker-compose 1.19

docker-compose up -d --force-recreate --build

从帮助菜单

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.

答案 2 :(得分:36)

这可以解决您的问题:

docker-compose ps # lists all services (id, name)
docker-compose stop <id/name> #this will stop only the selected container
docker-compose rm <id/name> # this will remove the docker container permanently 
docker-compose up # builds/rebuilds all not already built container 

答案 3 :(得分:19)

正如@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.

答案 4 :(得分:16)

也许这些步骤不太正确,但我确实是这样:

停止docker撰写:$ docker-compose down

删除容器:$ docker system prune -a

启动docker撰写:$ docker-compose up -d

答案 5 :(得分:4)

docker-compose stop nginx # stop if running
docker-compose rm -f nginx # remove without confirmation
docker-compose build nginx # build
docker-compose up -d nginx # create and start in background

用rm卸下容器是必不可少的。无需删除,Docker将启动旧容器。

答案 6 :(得分:2)

问题是:

$ docker-compose stop nginx

没有工作(你说它还在运行)。无论如何你要重建它,你可以尝试杀死它:

$ docker-compose kill nginx

如果它仍然无法正常工作,请尝试直接使用泊坞窗停止它:

$ 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

答案 7 :(得分:0)

只需使用:

docker-compose build [yml_service_name]

[yml_service_name]文件中用您的服务名称替换docker-compose.yml。您可以使用docker-compose restart来确保更改生效。您可以使用--no-cache忽略缓存。

答案 8 :(得分:0)

对我来说,它仅通过--no-cache--pull(可用于docker-compose build)从Docker Hub获取新的依赖关系。

# other steps before rebuild
docker-compose build --no-cache --pull nginx # rebuild nginx
# other steps after rebuild, e.g. up (see other answers)

答案 9 :(得分:-4)

$ docker-compose restart [yml_service_name]