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

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

在工作人员的发展过程中,我经常需要重新启动才能应用更改。 有没有什么好的方法来重新启动容器(如worker ),而不重新启动其他容器?

这很简单:使用命令:

 docker-compose restart worker 

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

 docker-compose restart -t 30 worker 

就这样 !

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

如果你已经更新了你的代码,你可以通过以下步骤来完成构build和重新加载:

 docker-compose up -d --build 

这将首先重build您的图像从任何改变的代码,这是快速的,如果没有改变,因为caching重用。 然后它只replace更换的容器。 如果下载的图像过时,可以在上面的命令之前加上:

 docker-compose pull 

要首先下载任何更改的图像(容器将不会重新启动,直到运行上面的命令up )。 做一个初步的停止是不必要的。

并且只对单个服务执行此操作,请遵循up或pull命令以及要指定的服务,例如:

 docker-compose up -d --build worker 

下面是第一个选项的一个简单例子,Dockerfile的结构使代码的频繁变化的部分接近尾声。 事实上,这个需求是分开的,因为这个文件很less改变。 而且由于nginx和redis容器是最新的,所以不会重新启动。 整个过程的总时间低于6秒:

 $ time docker-compose -f docker-compose.nginx-proxy.yml up -d --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 

简单的“docker工人”命令对“工人”容器一无所知。 使用这样的命令

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

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

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