Docker не создает новый контейнер при использовании сборки docker-compose - PullRequest
4 голосов
/ 16 мая 2019

Я установил два окна контейнера для ASP.NET и MSSQL сервера. На первой сборке docker-compose все работает как положено. Затем, после того как я внес некоторые изменения в пользовательский файл dockerfile и снова запустил сборку docker-compose, он снова использует старый контейнер, не внося никаких изменений.

Я предположил, что когда я делал сборку, он создавал новый контейнер. Я неправильно понимаю, как работает докер?

Это docker-compose.yml

version: '3'
services:
  db:
    image: microsoft/mssql-server-windows-developer

    environment:
      sa_password: "Password1234!"
      ACCEPT_EULA: "Y"

    ports:
      - "8003:1433"
    build:
      context: .
      dockerfile: mssql.dockerfile

  web:
    build:
      context: .
      dockerfile: web.dockerfile
    image: mcr.microsoft.com/dotnet/framework/aspnet:4.8
    #volumes:
    #  - .:C:/inetpub/wwwroot
    ports: 
      - "8080:80"
      - "8081:431"

Это mssql.dockerfile

# escape=`

FROM microsoft/mssql-server-windows-developer

#set shell
SHELL ["powershell.exe", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

#make temp folder
RUN mkdir C:\temp

#copy script to temp folder
COPY DownloadDatabase.ps1 C:\temp
COPY RestoreDatabase.ps1 C:\temp

#run script to retrieve production database
WORKDIR C:\temp

RUN .\DownloadDatabase.ps1 -sourcefile <url> -destinationfile <target>

CMD .\RestoreDatabase.ps1

Очень легко определить, использовалось ли изображение повторно, потому что mkdir C: \ temp выдает ошибку, говоря, что каталог уже существует.

РЕДАКТИРОВАТЬ: я уже перепробовал все опции в docker compose. без кеша, форс-rm

Ответы [ 2 ]

1 голос
/ 17 мая 2019
docker-compose build 

Только строит образы , но не запускает контейнеры.

Вот почему ваши изменения в файле Docker не применяются.Вы восстановили изображение, но не контейнер.Это причина, по которой ранее запущенный контейнер основан на более старой версии образа.

docker-compose up 

Из документации Docker :

Если существуют существующие контейнеры для службы, а конфигурация или образ службы были изменены после создания контейнера,docker-compose up фиксирует изменения, останавливая и воссоздавая контейнеры (сохраняя подключенные тома).Чтобы запретить Compose принимать изменения, используйте флаг --no-воссоздать.

Чтобы убедиться, что ваше изображение и контейнер перестроены, вы должны добавить следующие флаги:

docker-compose up --force-recreate --build

Таким образом, ваши контейнеры основаны на правильной версии образа.

Объяснение флагов из Docker Документация :

--build                   Build images before starting containers.

--force-recreate          Recreate containers even if their configuration
                          and image haven't changed.

Если вы хотитесделать это для конкретной службы, просто добавьте имя службы в конце командной строки:

docker-compose up --force-recreate --build serviceName

Еще один полезный флаг, если вы хотите очистить вывод, это флаг -d:

 -d, --detach              Detached mode: Run containers in the background,
                           print new container names. Incompatible with
0 голосов
/ 22 мая 2019

Оказывается, мне просто нужно было сделать docker-compose pull до docker-compose build, чтобы обновить файл Docker! Теперь он каждый раз создает новый образ!

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