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 许可协议
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 许可协议
重新启动单个节点的其他答案是目标, 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 许可协议
2 回答2.4k 阅读✓ 已解决
2 回答782 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读
2 回答1.2k 阅读
1 回答946 阅读
很简单:使用命令:
您可以设置在杀死容器之前等待停止的时间(以秒为单位)
请注意,这将重新启动容器,但不会重建它。如果您想应用更改然后重新启动,请查看其他答案。