我有以下命令:
docker run -e "DB_HOST=thehost" --rm my_application echo $DB_HOST
但是什么也没显示。我原以为会显示“主持人”。
我尝试使用简单引号,双引号和不带引号。
我想念什么?我需要在my_aplication的Dockerfile中指定ENV参数吗?
如果我这样做:
docker run -e "DB_HOST=thehost" --rm my_application echo $PATH
它正确显示PATH值。但这忽略了我的环境变量。
答案 0 :(得分:4)
这里有几层东西:
在第一个示例中
docker run ... echo $DB_HOST
您的本地shell在将变量引用传递给Docker之前就对其进行了捕获。
如果您明确将单引号
docker run ... echo '$DB_HOST'
Docker会找到/bin/echo
(假设它存在于容器中)并以字符串$DB_HOST
作为参数启动它,但是同样,由于Docker端不涉及任何shell,它会尽职地打印照原样删除该字符串。
您问题的直接答案是强制在Docker端安装一个外壳程序
docker run -e DB_HOST=thehost --rm my_application \
sh -c 'echo $DB_HOST'
更高的级别:
os.environ
,Ruby的ENV
,Node的process.env
, 等)#!/bin/sh
) CMD some command
,则Docker会自动将其包装在shell中;相当于CMD ["sh", "-c", "some command"]
ENTRYPOINT
也是一样,但是以这种方式使用它可能是一个错误