Как «собрать докер» для определенной службы?

У меня есть скрипт, который создает образ докера, загружает его в докер, обновляет docker-compose.yml, а затем вызывает docker compose down и docker compose up. После того, как сервисы Docker compose up воссозданы и сервис, который меня интересует, работает с правильной (новой) версией.

Я не хочу останавливать все службы, которые остановлены docker compose down, я хочу остановить единственную целевую. Я обнаружил, что и docker compose up, и docker compose down поддерживают указание имени службы.

вниз: https://forums.docker.com/t/docker-compose-down-specific-service/125914/8https://docs.docker.com/reference/cli/docker/compose/down/ вверх: https://docs.docker.com/reference/cli/docker/compose/up/

Но когда я звоню docker compose down myservicename в Docker version 25.0.3, я получаю ошибку: unknown command "myservicename" for "docker compose down"

Как остановить (и удалить) только один контейнер? Может быть, есть другой способ «обновить образ» только для одного контейнера?

Вы делаете что-то не так, но по той небольшой информации, которую вы предоставляете, невозможно сказать, что именно. Пожалуйста, предоставьте минимально воспроизводимый пример с подробными инструкциями, что вы делаете.

Ulrich Eckhardt 04.04.2024 10:22

Просто остановите нужный контейнер с помощью Docker container stop <containername>, затем снова запустите docker-compose up, что воссоздаст те, которые не работают.

daniu 04.04.2024 10:28

@UlrichEckhardt, что я делаю не так? Я создаю скрипт для автоматизации создания образа, переноса его на сервер, где работает докер, и повторного создания контейнера с этой новой версией образа.

Maxim Kitsenko 04.04.2024 11:32

Если ваш скрипт вносит изменения в файл docker-compose.yml, повторный запуск docker-compose up -d автоматически удалит и заново создаст изменившиеся контейнеры; вам не нужна команда down или stop вручную.

David Maze 04.04.2024 12:07
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
4
2 888
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам следует использовать комбинацию команд docker compose stop и docker compose rm, которые позволяют указать имя службы.

Остановите конкретную службу. Во-первых, вам необходимо остановить службу, если она запущена.

docker compose stop myservicename

Удалить остановленный контейнер службы. После остановки службы вы можете удалить ее контейнер.

docker compose rm -f myservicename

Обновите и перезапустите конкретную службу. Теперь, когда конкретная служба остановлена ​​и удалена, вы можете приступить к обновлению ее образа и перезапустить ее.

docker compose up -d --no-deps --build myservicename

Спасибо! А что, если просто вызвать doclker compose up service name, не останавливаясь и не снимая его? Похоже, он также воссоздаст контейнер. Действительно ли мне нужно остановиться и удалить контейнер?

Maxim Kitsenko 04.04.2024 10:51

Остановка и удаление контейнера обеспечивает чистый перезапуск без остатков предыдущего экземпляра. Это вопрос предпочтений и необходимости контроля над процессом.

Puttsche 04.04.2024 10:59

Я нашел следующее решение только что docker compose up -d servicename, без всякихdocker compose down и docker compose rm.

В ответ получаю:

 Container postgressvc  Running
 Container rabbitmqsvc_3_9_27  Running
 Container eventstoredishessvc_23_10_0  Running
 Container youmenu_dishes_run  Recreate
 Container youmenu_dishes_run  Recreated
 Container youmenu_dishes_run  Starting
 Container youmenu_dishes_run  Started
Operation completed successfully.

Итак, согласно выводам, я могу сделать вывод, что контейнер был воссоздан. Остальные контейнеры работали без перезапуска. Контейнеры в выводе — это контейнеры из раздела «зависит» в docker-compose.yml.

Несмотря на то, что другие говорят, что лучше «остановить и удалить» старый контейнер, перед воссозданием я решил опубликовать этот ответ, возможно, он будет кому-то полезен. В целом я согласен: «остановить и удалить» контейнер обеспечивает чистый перезапуск.

Другие вопросы по теме