web-dev-qa-db-ja.com

Dockerfileで複数行の環境変数を設定する

Dockerfileに複数行の環境変数を設定したい。

コマンドラインで機能

docker runを介して環境変数を渡すと、すべてが機能します。

CONFIG="port: 4466
databases:
  prod:
    connector: mysql
    active: true
    Host: 33.333.333.333
    port: 3306
    user: root
    password: pass"
docker run --env CONFIG="$CONFIG" ubuntu:latest env | grep 'CONFIG'

出力(複数行変数として解釈されるため、単一行のみ)

CONFIG=port: 4466

Dockerfileを介して動作しません

Dockerfile

FROM ubuntu:latest
ENV CONFIG 'port: 4466\ndatabases:\n  prod:\n    connector: mysql\n    active: true\n    Host: Host\n    port: 3306\n    user: root\n    password: pass'

Dockerイメージをビルドして実行する

docker build -t multilinetest .
docker run multilinetest env | grep 'CONFIG'

出力

CONFIG=port: 4466\ndatabases:\n  prod:\n    connector: mysql\n    active: true\n    Host: Host\n    port: 3306\n    user: root\n    password: pass

期待される

両方のシナリオで同じ環境変数を保存する必要があります(この環境変数を、複数行の文字列を必要とするサードパーティのイメージに渡します)

7
Daniel Rasmuson

マルチライン環境変数をビルド引数としてdocker buildに渡すことで、これを機能させることができました。

Dockerfile

FROM ubuntu:latest
ARG CONFIG
ENV CONFIG $CONFIG

ビルドコマンド

CONFIG="port: 4466
databases:
  prod:
    connector: mysql
    active: true
    Host: 33.333.333.333
    port: 3306
    user: root
    password: pass"
docker build --build-arg CONFIG="$CONFIG" ubuntu:latest env | grep 'CONFIG'
6
Daniel Rasmuson

改行文字のエスケープは正常に機能します。

Dockerfile

ENV BUILD_DEPENDENCIES apt-utils \
  curl \
  libc-dev \
  gcc \
  gnupg2

出力

Step 8/48 : ENV BUILD_DEPENDENCIES apt-utils   curl   libc-dev   gcc   gnupg2
 ---> Running in 65b0ad105af4
6
Édouard Lopez