Docker swarm: конфигурация 'build' в файле docker compose игнорируется при развертывании стека

Мы создали файл составления Docker с несколькими службами. Образы для этих сервисов создаются во время выполнения с использованием параметра конфигурации "build". Соответствующие Dockerfile (ы) приведены в соответствующих каталогах.

Образец файла создания докера...

version: '3'
services:
  db2server:
    build: ./db2server
    ports:
      - "50005:50000"
    command: ["db2start"]
  appruntime:
    build: ./appruntime
    depends_on:
     - db2server

Этот файл docker compose работает с docker-compose команда.

  • Изображения создаются во время выполнения из Dockerfile (ов), присутствующих в db2server & appruntime каталоги
  • Эти образы развертываются на хост-машине

Но когда мы пытаемся развернуть это в рое докеров, появляется следующая ошибка...

стек развертывания док-станции приложение -c /home/docker/docker-compose.yml

Ignoring unsupported options: build

Creating network app_default
Creating service app_db2server
failed to create service app_db2server: Error response from daemon: rpc error: code = InvalidArgument desc = ContainerSpec: image reference must be provided

Похоже, опция конфигурации 'build' игнорируется при развертывании стека в Docker Swarm.

Как мы можем развернуть эти сервисы (с опцией сборки), определенные в файле docker compose в Docker Swarm.

2 ответа

Короткий ответ: вы не можете использовать build команда с docker stack deploy,

Из документов:

Примечание: docker stack команда build Эта опция игнорируется при развертывании стека в режиме роя с файлом (версия 3) Compose. docker stack Команда принимает только готовые изображения.

Альтернативой является создание образа докера перед развертыванием вашего роя кластера.

Использовать docker build команда для создания образа докера; Нажмите созданное изображение в (публичный или частный) docker registry; и ссылаться на это в вашем docker compose файл.

Если кто-то все еще этим занимается, вы можете пометить встроенное изображение в compose, установив параметр image вместе с параметром build, как вы можете видеть в разделе сборки документации. Таким образом, файл должен выглядеть так:

version: '3'
services:
  db2server:
    image: <your registry here>/db2server
    build: ./db2server
    ports:
      - "50005:50000"
    command: ["db2start"]
  appruntime:
    image: <your registry here>/appruntime
    build: ./appruntime
    depends_on:
     - db2server

тогда вы можете сделать:

docker-compose build
docker-compose push
docker stack deploy -c /home/docker/docker-compose.yml app

Файл compose обслуживает оба инструмента: docker-compose Cli, и docker stack кли. опции "сборки" работают в docker-compose но игнорируются командами стека, а параметры "развертывания" работают в командах стека, но игнорируются docker-compose,

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

Таким образом, типичный пример - либо Docker Hub автоматически создает ваши изображения на основе фиксации кода, либо ваша платформа CI/CD создает изображения и передает их в реестр. Тогда ваш stack deploy Команды извлекут правильное изображение из этого реестра.

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