Мои образы докеров создаются на CI-сервере Jenkins и помещаются в наш личный реестр Docker. Моя цель состоит в том, чтобы обеспечить среду с docker-compose, которая всегда запускает исходное состояние образов.
В настоящее время я использую docker-compose 1.3.2, а также 1.4.0 на разных машинах, но ранее мы также использовали более старые версии.
Я всегда использовал docker-compose pull && docker-compose up -d
команды, чтобы получить свежие изображения из реестра и запустить их. Я полагаю, что мое предпочтительное поведение работало как ожидалось до определенного момента времени, но с тех пор docker-compose up
начал перезапускать ранее остановленные контейнеры вместо того, чтобы каждый раз запускать изначально созданные образы.
Есть ли способ избавиться от этого поведения? Может ли это быть способом, который подключен в файле конфигурации docker-compose.yml, чтобы он не зависел от того, чтобы «не забывать» что-то в командной строке при каждом вызове?
пс. Помимо поиска пути к достижению моей цели, я также хотел бы узнать немного больше о предыстории этого поведения. Я думаю, что основная идея Docker заключается в создании неизменной инфраструктуры. Текущее поведение docker-compose, похоже, просто противоречит этому подходу ... или я здесь упускаю некоторые моменты?
источник
docker-compose run -d
не существует? Вы хотите сказатьdocker-compose up -d
нет?docker-compose pull
раньше,docker-compose rm -f
вы можете сэкономить еще больше времениЕдинственное решение, которое работало для меня, было этой командой:
Это автоматически извлечет свежее изображение из репозитория и не будет использовать версию кеша, которая была предварительно собрана с какими-либо параметрами, которые вы использовали ранее.
источник
Согласно текущей официальной документации, существует сокращение, которое останавливает и удаляет контейнеры, сети, тома и образы, созданные up, если они уже остановлены или частично удалены и т. Д., То это тоже поможет:
Тогда, если у вас есть новые изменения в ваших изображениях или Dockerfiles, используйте:
В заключение:
docker-compose up
В одной команде:
docker-compose down && docker-compose build --no-cache && docker-compose up
источник
docker-compose build --no-cache
нужен только если есть изменения в Dockerfiles.docker-compose up
необходимо перестроить сервисы с помощьюdocker-compose build
.Вы можете перейти
--force-recreate
кdocker compose up
, который должен использовать свежие контейнеры.Я думаю, что причина повторного использования контейнеров заключается в том, чтобы сохранить любые изменения в процессе разработки. Обратите внимание, что Compose делает то же самое с томами, которые также сохраняются между воссозданием контейнера (воссозданный контейнер будет присоединяться к томам своего предшественника). Это может быть полезно, например, если в качестве кеша используется контейнер Redis и вы не хотите терять кеш каждый раз, когда вносите небольшие изменения. В других случаях это просто сбивает с толку.
Я не верю, что есть какой-то способ заставить это сделать из файла Compose.
Возможно, это противоречит неизменным принципам инфраструктуры. Контр-аргумент, вероятно, заключается в том, что вы не используете Compose в производстве (пока). Кроме того, я не уверен, что согласен с тем, что неизменная инфраструктура является основной идеей Docker, хотя это, безусловно, хороший вариант использования / точка продажи.
источник
--force-recreate
у меня не работает ... Изображение не вытащено, хотя там есть более новая версия ...ИЛИ
источник
Если есть что-то новое, оно будет восстановлено.
источник