Есть сфера услуг, которые определены в 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 --build
Ответы:
докер-сочинять
источник
docker-compose build service1 service2 --no-cache
делает эту работу лучше ( github.com/docker/compose/issues/1049 ). У меня была проблема с кэшированными контейнерами, которые были созданы перед использованиемdocker-compose up -d --no-deps --build <service_name>
docker-compose build --no-cache service1 service2
С докером-сочинять 1.19
up
Без одного или нескольких
service_name
аргументов все контейнеры будут перестроеныИз меню помощи
источник
docker-compose up -d --force-recreate --build container_name
build --no-cache
опции, если описание команды не полностью неверноЭто должно исправить вашу проблему:
источник
stop
иrm
все контейнеры, то вы можете использовать командуdocker-compose down
. Ваше решение лучше, если вы хотите избавиться только от некоторых.docker-compose build <id/name>
прежде чемup
пересобрать измененный Dockerfile.Как писал @HarlemSquirrel, это лучшее и я думаю правильное решение.
Но, чтобы ответить на конкретную проблему OP, это должна быть что-то вроде следующей команды, так как он не хочет воссоздавать ВСЕ службы в
docker-compose.yml
файле, а толькоnginx
одну:Описание вариантов:
источник
Возможно, эти шаги не совсем корректны, но я делаю так:
остановить докер составить:
$ docker-compose down
удалить контейнер:
$ docker system prune -a
начать докер составить:
$ docker-compose up -d
источник
Просто используйте:
Замените
[yml_service_name]
на имя вашей службы вdocker-compose.yml
файле. Вы можете использовать,docker-compose restart
чтобы убедиться, что изменения внесены. Вы можете использовать,--no-cache
чтобы игнорировать кеш.источник
Проблема в:
не работал (вы сказали, что он все еще работает). Если вы все равно собираетесь восстановить его, вы можете попробовать убить его:
Если это все еще не работает, попробуйте остановить его напрямую с помощью Docker:
или удали это
Если это по-прежнему не работает, проверьте версию Docker, возможно, вы захотите обновить ее.
Это может быть ошибка, вы можете проверить, соответствует ли она вашей системе / версии. Вот пара, например: https://github.com/docker/docker/issues/10589
https://github.com/docker/docker/issues/12738
В качестве обходного пути вы можете попытаться убить процесс.
источник
Для меня он только получил новые зависимости от Docker Hub с обоими
--no-cache
и--pull
(которые доступны дляdocker-compose build
.источник
Удаление контейнера с помощью rm является обязательным. Не удаляя, Docker запустит старый контейнер.
источник
Только:
источник