首页 > 解决方案 > 将 ENV 传递给运行单个命令的 Docker 容器

问题描述

这打印空白:

docker run --rm --env HELLO="world" ubuntu:18.04 bash -c "echo $HELLO"

但是,这有效:

docker run --rm -it --env HELLO="world" ubuntu:18.04 bash
# in the container
echo $HELLO

HELLO似乎传递给了容器:

docker run --rm --env HELLO="world" ubuntu:18.04 env

为什么第一个命令看不到HELLO?我错过了什么?

标签: bashdockerubuntuenvironment-variablesalpine

解决方案


由于双引号,$HELLO一旦命令在进入容器之前执行,将由 docker 主机本身评估。因此,您需要$使用反斜杠 ( \) 转义美元符号 ( ),这告诉 bash$是命令本身的一部分,不需要由当前 shell(在我们的例子中是 docker 主机)进行评估,或者使用单引号 ( '') 像这样:

使用单引号

$ docker run --rm --env HELLO="world" ubuntu:18.04 bash -c 'echo $HELLO'
world

使用反斜杠转义

$ docker run --rm --env HELLO="world" ubuntu:18.04 bash -c "echo \$HELLO"
world

推荐阅读