如何使用 docker-compose 重启单个容器

新手上路,请多包涵

I have a docker-compose.yml file that contains 4 containers: redis , postgres , api and worker .

worker 容器的开发过程中,我经常需要重新启动它以应用更改。有没有什么好方法可以重新启动单个容器(例如 worker )而不重新启动其他容器?

原文由 Bryan Chen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

很简单:使用命令:

 docker-compose restart worker

您可以设置在杀死容器之前等待停止的时间(以秒为单位)

 docker-compose restart -t 30 worker

请注意,这将重新启动容器,但不会重建它。如果您想应用更改然后重新启动,请查看其他答案。

原文由 bmkrio 发布,翻译遵循 CC BY-SA 4.0 许可协议

重新启动单个节点的其他答案是目标, docker-compose restart worker 。这将反弹该容器,但不包括任何更改,即使您单独重建它也是如此。 You can stop , rm , create , and start , but there are much easier methods.

如果您更新了代码,则可以通过以下步骤一步完成构建和重新加载:

 docker-compose up --detach --build

这将首先从任何更改的代码中重建您的图像,如果没有更改,因为缓存被重用,这会很快。然后它只替换更改的容器。如果您下载的图像已过时,您可以在上述命令之前添加:

 docker-compose pull

首先下载任何更改的图像(在您运行类似 up 之类的命令之前,容器不会重新启动)。不需要进行初始停止。

并且仅对单个服务执行此操作,请按照 up 或 pull 命令使用您要指定的服务,例如:

 docker-compose up --detach --build worker


这是第一个选项的快速示例,Dockerfile 的结构旨在将代码中频繁更改的部分保持在末尾附近。事实上,要求是单独为 pip install 提取的,因为该文件很少更改。由于 nginx 和 redis 容器是最新的,因此它们没有重新启动。整个过程的总时间不到 6 秒:

 $ time docker-compose -f docker-compose.nginx-proxy.yml up --detach --build
Building counter
Step 1 : FROM python:2.7-alpine
 ---> fc479af56697
Step 2 : WORKDIR /app
 ---> Using cache
 ---> d04d0d6d98f1
Step 3 : ADD requirements.txt /app/requirements.txt
 ---> Using cache
 ---> 9c4e311f3f0c
Step 4 : RUN pip install -r requirements.txt
 ---> Using cache
 ---> 85b878795479
Step 5 : ADD . /app
 ---> 63e3d4e6b539
Removing intermediate container 9af53c35d8fe
Step 6 : EXPOSE 80
 ---> Running in a5b3d3f80cd4
 ---> 4ce3750610a9
Removing intermediate container a5b3d3f80cd4
Step 7 : CMD gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --workers 4 --keep-alive 0
 ---> Running in 0d69957bda4c
 ---> d41ff1635cb7
Removing intermediate container 0d69957bda4c
Successfully built d41ff1635cb7
counter_nginx_1 is up-to-date
counter_redis_1 is up-to-date
Recreating counter_counter_1

real    0m5.959s
user    0m0.508s
sys     0m0.076s

原文由 BMitch 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题