Ответ 1
$docker-compose up -d --no-deps --build <service_name>
- no-deps - Не запускать связанные службы.
- build - создавать изображения перед запуском контейнеров.
Существует множество сервисов, определенных в файле 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 не убивает все запущенные контейнеры!
$docker-compose up -d --no-deps --build <service_name>
- no-deps - Не запускать связанные службы.
- build - создавать изображения перед запуском контейнеров.
С докером-сочинять 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.
Это должно устранить вашу проблему:
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
Как писал @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.
Проблема заключается в следующем:
$ 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
Просто используйте:
docker-compose build [yml_service_name]
Замените [yml_service_name]
именем вашей службы в файле docker-compose.yml
. Вы можете использовать docker-compose restart
чтобы убедиться, что изменения вступили в силу. Вы можете использовать --no-cache
чтобы игнорировать кеш.
только
$ docker-compose restart [yml_service_name]