2016-04-27 5 views
33

Существует множество сервисов, которые определены в файле docker-compose.yml. Эти службы были запущены. Мне нужно перестроить только один из них и запустить его без дополнительных сервисов. я выполнить следующие команды:Как перестроить контейнер докеров в 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 контейнер. Кстати, докер-компот не убивает всех запущенных контейнеров!

ответ

16

Это должно исправить вашу проблему:

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

Если вы хотите «останавливать» и «rm» все контейнеры, то вы можете использовать команду 'docker-compose down'. Ваше решение лучше, если вы только хотите избавиться от некоторых. – hirowatari

1

Проблема заключается в том:

$ docker-compose stop nginx 

не работает (вы сказали, что все еще работает). Если вы собираетесь восстановить его в любом случае, вы можете попробовать его убить:

$ docker-compose kill nginx 

Если он все еще не работает, попытайтесь остановить его с грузчиком непосредственно:

$ docker stop nginx 

или удалить его

$ docker rm -f nginx 

Если это все еще не работает, проверьте версию докеры, вы можете обновить ее.

Возможно, это ошибка, вы можете проверить, соответствует ли ваша система/версия. Вот пара, напр: https://github.com/docker/docker/issues/10589

https://github.com/docker/docker/issues/12738

В качестве обходного пути, вы могли бы попытаться убить процесс.

$ ps aux | grep docker 
$ kill 225654 # example process id 
-3

только:

$ docker-compose restart [yml_service_name] 
+1

это не приведет к новым изменениям. из руководства. Если вы вносите изменения в конфигурацию docker-compose.yml, эти изменения не будут отображаться после выполнения этой команды. – denov

48

docker-compose up

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

--no-Deps - Не начинайте связанные услуги.

--build - создавать изображения перед запуском контейнеров.

+2

'docker-compose build service1 service2 --no-cache' делает эту работу лучше (https://github.com/docker/compose/issues/1049). У меня возникла проблема с кэшированными контейнерами, которые были созданы до использования 'docker-compose up -d -no-deps --build <имя_сервера>' – evgpisarchik