Как заставить docker-compose вытягивать новые образы? - PullRequest
0 голосов
/ 27 ноября 2018

Я использую тег latest в своем Dockerfile в выражении FROM:

# Dockerfile
FROM registry.website.com/base-image:latest

Каждый раз, когда меняется моя версия latest, мне нужно повторно вытащить это изображение.

К сожалению, докер просто берет кэшированную версию.

Я пробовал

docker-compose build --no-cache

и docker-compose up --build --force-recreate project

Но это всегдавыглядит так:

> docker-compose up --build --force-recreate project
Building project
Step 1/12 : FROM registry.website.com/base-image:latest
 ---> e2a0bcaf3dd7

Есть идеи, почему это не работает?

Спасибо

Рон

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Это поведение по умолчанию docker run и аналогичных команд: оно вытянет изображение, если у вас его еще нет, но если оно у вас есть, оно предполагает, что у вас уже есть верное.В этом случае, поскольку изображение не указано непосредственно в файле docker-compose.yml, у вас не так много ярлыков;Вы можете написать что-то вроде

sed -ne 's@^FROM \(.*/.*\)@\1@p' | xargs docker pull

, чтобы вытянуть все, перечисленные в строке FROM, но не базовые изображения для многоэтапных сборок (имена изображений должны содержать косую черту);это возможно излишне.

Я видел несколько предложений, чтобы избежать использования тегов latest;это одна из нескольких важных причин (вы также не контролируете основную версию предварительно упакованного программного обеспечения и не получите последовательного развертывания на установках с несколькими узлами).Если у вас есть настройка непрерывной интеграции, создающая часто меняющееся изображение, вы можете пометить его отметкой даты или идентификатором сборки и поместить его в строку FROM.Вы можете использовать ARG, чтобы сделать это более настраиваемым, и передать его через docker-compose.yml, в конечном итоге возвращаясь к переменной среды.

I 'Я предполагаю, что вы, вероятно, получите оболочку для скрипта оболочки, несмотря ни на что, и если у вас установлена ​​версия latest, она может выглядеть как

#!/bin/sh
set -e
docker pull registry.website.com/base-image:latest
docker build -t ... .
docker-compose up -d
0 голосов
/ 27 ноября 2018

Я думаю, что вы ищете docker-compose pull:

$ docker-compose help pull
Pulls images for services defined in a Compose file, but does not start the containers.

Так что docker-compose pull && docker-compose up должен делать то, что вы хотите, без необходимости постоянно стирать кэш или жесткий кодимена контейнеров вне вашего файла композита

0 голосов
/ 27 ноября 2018

Хорошо, не очень хорошее ручное решение заключается в следующем:

docker image rm registry.website.com/base-image

Надеюсь, у кого-то есть решение docker-compose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...