Как передать аргументы в docker-compose?

Docker 1.9 позволяет передавать аргументы в файл докера. См. Ссылку: https://docs.docker.com/engine/reference/builder/#arg

Как передать те же аргументы в docker-compose.yml?
Если возможно, также укажите пример.


person meallhour    schedule 16.12.2015    source источник


Ответы (4)


Эта функция была добавлена ​​в Compose 1.6.

Ссылка: https://docs.docker.com/compose/compose-file/#args

services:
  web:
    build:
      context: .
      args:
        FOO: foo
person dnephin    schedule 16.12.2015
comment
Когда я запускаю docker-compose version, отображается 1.29.1, и на момент написания это последняя версия. 1,6? - person volvox; 15.07.2021

Теперь docker-compose поддерживает подстановку переменных.

Compose использует значения переменных из среды оболочки, в которой запущен docker-compose. Например, предположим, что оболочка содержит POSTGRES_VERSION=9.3, и вы указываете эту конфигурацию в своем docker-compose.yml файле:

db:
  image: "postgres:${POSTGRES_VERSION}"

Когда вы запускаете docker-compose up с этой конфигурацией, Compose ищет переменную среды POSTGRES_VERSION в оболочке и подставляет ее значение в. В этом примере Compose преобразует image в postgres:9.3 перед запуском конфигурации.

person Hemerson Varela    schedule 29.01.2016
comment
Аргументы сборки - это функция Docker 1.9, задавался вопрос, как заставить Docker Compose их использовать. Замена переменных не связана. - person Jack; 19.02.2016
comment
@Jack Я знаю, что это не прямой ответ на вопрос, но это может быть обходной путь, поскольку docker-compose не поддерживает передачу аргументов. - person Hemerson Varela; 19.02.2016
comment
@Jack Я пришел сюда искать замену переменных, так что это было полезно для меня - person Andy; 13.07.2016
comment
Буду использовать это в настоящее время. Нельзя использовать docker-compose run для передачи аргументов, поскольку аргумент должен быть передан нескольким контейнерам. - person andho; 20.02.2017
comment
Есть ли способ установить значение по умолчанию в одном месте? Мы делали ${PLATFORM_VERSION:-v1.0.0} всюду, и было бы неплохо просто поставить значение по умолчанию в одном месте. - person weberc2; 05.09.2018
comment
@ weberc2 Я знаю, что сейчас вам следовало бы выяснить, но я оставлю это здесь для других. Вы можете установить его как среду со значением по умолчанию в вашем docker-compose.yml файле. environment:\n PLATFORM_VERSION: "${PLATFORM_VERSION:-v1.0.0}". PS: \n просто потому, что я не смог найти способ отформатировать многострочный блок кода в комментариях. - person Sidney de Moraes; 29.03.2019

Теперь это можно сделать в docker-compose v2 + как часть объекта build;

docker-compose.yml

version: '2'
services:
    my_image_name:
        build:
            context: . #current dir as build context
            args:
                var1: 1
                var2: c

См. докер создания документов.

В приведенном выше примере "var1" и "var2" будут отправлены в среду сборки.

Примечание: любые переменные env (указанные с помощью блока environment), которые имеют то же имя, что и переменная (и) args, переопределят эту переменную.

person tgallacher    schedule 10.05.2016
comment
@tfg Знаете ли вы, что клавиши args должны быть строчными? В документации и во всех примерах, которые я видел, используются клавиши нижнего регистра, но я не встречал упоминания о том, что это требуется. - person pdoherty926; 31.08.2016
comment
@ pdoherty926 Это должно быть просто расширение переменной bash, поэтому заглавные и строчные буквы с подчеркиванием подойдут. - person tgallacher; 03.09.2016
comment
@tfg Спасибо. Тем временем я сам пришел к такому выводу. Вы хоть представляете, почему в документах / примерах используется это соглашение? - person pdoherty926; 03.09.2016
comment
К сожалению, это не работает для стеков: этот параметр игнорируется при развертывании стека в режиме роя с файлом Compose (версия 3). Команда docker stack принимает только предварительно созданные изображения из docs.docker.com/compose/ compose-file / # build - person joshmcode; 13.10.2017
comment
@tgallacher AFAIK, переменные в блоке environment не переопределяют переменные args. Просто args переменные доступны во время процесса сборки контейнера, но environment переменных доступны, пока контейнер запущен. - person Masood Khaari; 26.11.2018

Что-то добавить к этим ответам, что args подбираются только при использовании docker-compose up --build, а не при использовании docker-compose build. Если вы хотите собирать и запускать в отдельные шаги, вам нужно использовать docker-compose build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}или docker build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}

person AndyFaizan    schedule 09.07.2021