bash - 将 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
?我错过了什么?
解决方案
由于双引号,$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
推荐阅读
- c# - 如何在 Xamarin Form Android 中创建数据表?
- ios - 容器视图内的英雄转换
- reactjs - 选择单行 Flatlist React native
- android - 在 Canvas 上绘制圆角圆弧
- java - 我如何在卡片视图中按 ID 显示从 listview 到下一个意图活动的回收视图数据这是我的代码,请检查并显示结果
- javascript - UnhandledPromiseRejectionWarning:错误:无效地址:未定义。如何处理?
- c - openssl 自定义扩展回调函数
- java - 如何通过 selenium-webdriver 和 Java 处理分页
- docker - 在 ICP 3.1.1 上安装 MCM(多云管理器)3.1.1 时出错
- java - 如何使用java从像“abc#{xxxx}def#{yyyy}ghi”这样的字符串中获取像[“#{xxxx}”,“#{yyyy}”]这样的字符串数组?