Подтвердить что ты не робот

Как перестроить контейнер докера в 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. Кстати, docker-compose не убивает все запущенные контейнеры!

4b9b3361

Ответ 1

docker-compose up

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

- no-deps - Не запускать связанные службы.

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

Ответ 2

С докером-сочинять 1.19

docker-compose up -d --force-recreate --build

Из меню помощи

Options:
  -d                  Detached mode: Run containers in the background,
                      print new container names. Incompatible with
                      --abort-on-container-exit.
  --force-recreate    Recreate containers even if their configuration
                      and image haven't changed.
  --build             Build images before starting containers.

Ответ 3

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

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 

Ответ 4

Как писал @HarlemSquirrel, это лучшее и я думаю правильное решение.

Но, чтобы ответить на конкретную проблему OP, это должна быть что-то вроде следующей команды, так как он не хочет воссоздавать ВСЕ службы в файле docker-compose.yml, но только nginx:

docker-compose up -d --force-recreate --no-deps --build nginx

Описание вариантов:

Options:
  -d                  Detached mode: Run containers in the background,
                      print new container names. Incompatible with
                      --abort-on-container-exit.
  --force-recreate    Recreate containers even if their configuration
                      and image haven't changed.
  --build             Build images before starting containers.
  --no-deps           Don't start linked services.

Ответ 5

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

$ 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

Ответ 6

Просто используйте:

docker-compose build [yml_service_name]

Замените [yml_service_name] именем вашей службы в файле docker-compose.yml. Вы можете использовать docker-compose restart чтобы убедиться, что изменения вступили в силу. Вы можете использовать --no-cache чтобы игнорировать кеш.

Ответ 7

только

$ docker-compose restart [yml_service_name]