it-swarm.asia

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

我有一个包含4个容器的docker-compose.yml文件:redis,postgres,api,worker

在开发worker期间,我经常需要重新启动它才能应用更改。有没有什么好方法可以重新启动容器(例如worker)而无需重新启动其他容器?

228
Bryan Chen

这很简单:使用命令:

docker-compose restart worker

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

docker-compose restart -t 30 worker

就这样 !

282
bmkrio

重启单个节点的其他答案都在目标docker-compose restart worker上。这将弹回该容器,但不包括任何更改,即使您单独重建它。您可以手动stoprmcreatestart,但有更简单的方法。

如果您已更新代码,则可以通过以下步骤执行构建和重新加载:

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
121
BMitch

要在此处重新启动服务,请执行以下步骤:

docker-compose stop -t 1 worker
docker-compose build worker
docker-compose create worker
docker-compose start worker
18
Jeff

遵循命令

docker-compose restart worker

将只是停止并启动容器。即不加载来自docker-compose.xml的任何更改

STOP类似于PC中的休眠。因此,停止/启动不会查找配置文件中所做的任何更改。要从容器配方(docker-compose.xml)重新加载,我们需要删除并创建容器(类似于重启PC)

所以命令如下

docker-compose stop worker       // go to hibernate
docker-compose rm worker        // shutdown the PC 
docker-compose create worker     // create the container from image and put it in hibernate

docker-compose start worker //bring container to life from hibernation
8
Mr Coder

简单的'docker'命令对'worker'容器一无所知。使用这样的命令

docker-compose -f docker-compose.yml restart worker

5
Shtlzut

使用docker-compose文件重新启动服务

docker-compose -f compose-file.yml restart servieName

如果文件名是docker-compose.yml且service是worker

docker-compose restart worker

如果文件名sample.yml和service是worker

docker-compose -f sample.yml restart worker

就是这个

4
Jinna Balu