使用 Dockerfile 设置多行环境变量

问题描述 投票:0回答:3

我想在我的 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

预计

两种场景都应该存储相同的环境变量(我将此环境变量传递到需要多行字符串的第三方图像中)

linux bash docker
3个回答
25
投票

我能够通过将多行环境变量作为构建参数传递给 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'

10
投票

转义换行符效果很好。

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

0
投票

您可以导出环境变量并仅将其名称传递给docker。也可以在 docker-compose 中使用。

root@e14:~# export KCONFIG=$(head /boot/config-$(uname -r))

root@e14:~# echo "$KCONFIG"
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 6.5.0-28-generic Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120300
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23800

root@e14:~# docker run --env KCONFIG --rm --entrypoint /bin/bash ubuntu:22.04 -c 'echo "$KCONFIG"'
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 6.5.0-28-generic Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=120300
CONFIG_CLANG_VERSION=0
CONFIG_AS_IS_GNU=y
CONFIG_AS_VERSION=23800

© www.soinside.com 2019 - 2024. All rights reserved.