Динамически передавая аргумент в `docker-compose.yml` - PullRequest
0 голосов
/ 10 октября 2019

Я могу указать аргумент в docker-compose.yml следующим образом (например, RAILS_ENV)

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: production

Dockerfile использует это ARG и устанавливает ENV, чтобы мое изображение было построенос этой переменной среды:

FROM ruby:2.5.1

# ...

ARG RAILS_ENV
ENV RAILS_ENV=$RAILS_ENV

# ...
# Image contains environment variable `$RAILS_ENV` as `"production"`

Однако, что если я захочу использовать что-то другое, чем жестко закодированное значение "production"?

  1. Есть ли способ динамической передачи переменной в файл docker-compose.yml?

  2. Кроме того, можно ли указать значение по умолчанию (например,development) в docker-compose.yml на случай, если я ничего не передам?

Спасибо!

1 Ответ

1 голос
/ 10 октября 2019

Да, вы можете сделать это.

Сначала вам нужно будет создать .env с переменными (в том же месте, что и ваш Dockerfile):

RAILS_ENV=production

Выне сохраняете этот файл в хранилище (вы должны добавить его в .gitignore). И затем вы можете начать использовать их в Dockerfile:

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV}

Существует два способа определения значений по умолчанию для переменных:

$ {VARIABLE: -default} оцениваетпо умолчанию, если VARIABLE не установлен или пуст в среде. $ {VARIABLE-default} оценивается как значение по умолчанию, только если VARIABLE не установлен в среде.

Так, например:

version: '3'
services:
  web:
    build:
     context: .
     args:
       RAILS_ENV: ${RAILS_ENV:-development}

Подробнее читайте здесь: https://docs.docker.com/compose/compose-file/#variable-substitution

...