Як передавати аргументи в docker-compose?


Відповіді:



81

Тепер docker-composeпідтримує заміну змінних.

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

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

Коли ви запускаєте docker-compose upз цією конфігурацією, Compose шукає POSTGRES_VERSIONзмінну середовища в оболонці та підставляє її значення дюймом. У цьому прикладі Compose вирішує значення imageto postgres:9.3перед запуском конфігурації.


3
Аргументи побудови - це функція Docker 1.9, запитання про те, як змусити Docker Compose використовувати їх. Заміна змінних не пов’язана.
Джек

8
@Jack Я знаю, що це не пряма відповідь на запитання, але це може бути обхідним шляхом, оскільки docker-composeне підтримує передавання аргументів.
Хемерсон Варела,

18
@Jack Я прийшов сюди, шукаючи заміну змінних, тому мені це було корисно
Енді

Поки що використовуватиму це. Неможливо використовувати docker-compose runдля передачі аргументів, оскільки аргумент повинен бути переданий у кілька контейнерів.
andho

1
@ weberc2 Я знаю, що в цей час ти мав це зрозуміти, але я залишу це тут для інших. Ви можете встановити його як середовище зі значенням за замовчуванням у вашому docker-compose.ymlфайлі. environment:\n PLATFORM_VERSION: "${PLATFORM_VERSION:-v1.0.0}". PS: \nсаме тому, що я не міг знайти спосіб форматування багаторядкового коду в коментарях.
Сідней де Мораес,

76

Тепер це можна зробити з 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змінні, замінять цю змінну.


@tfg Чи знаєте ви, чи argsклавіші мають бути малими? У документах та всіх прикладах, які я бачив, використовуються малі клавіші, але я не бачив жодної згадки про те, що це потрібно .
pdoherty926

@ pdoherty926 Це має бути просто розширення змінної bash, тому великі та малі літери з підкресленнями мають бути чудовими.
tgallacher

@tfg Дякую. Тим часом я сам дійшов такого висновку. Ви уявляєте, чому в документах / прикладах використовується ця умова?
pdoherty926

1
На жаль, це не працює для стеків: "Цей параметр ігнорується під час розгортання стека в режимі рою за допомогою файлу композиції
joshmcode

@tgallacher AFAIK, змінні в environmentблоці не замінюють argsзмінні. Просто argsзмінні доступні під час процесу побудови контейнера , але environmentзмінні доступні під час запуску контейнера .
Massood Khaari
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.