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
Команды извлекут правильное изображение из этого реестра.