我有一个像这样的env变量值:
TEST_VAR=The value
有人知道这是否合法吗?我应该将"
放在这个值的周围,以便在docker中根据需要进行解释吗?
感谢
编辑:引号不是一个好的解决方案,因为它将成为val的一部分,请参阅参考here。
答案 0 :(得分:8)
让我们看看运行以下撰写文件的结果:
version: "3"
services:
service:
image: alpine
command: env
env_file: env.conf
env.conf:
TEST_VAR1=The value
TEST_VAR2="The value2"
docker-compose up
结果:
service_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
service_1 | TEST_VAR2="The value2"
service_1 | TEST_VAR1=The value
service_1 | HOME=/root
因此,在env值中包含空格是合法的。
答案 1 :(得分:6)
您可以使用\
TEST_VAR=The\ value
编辑:这是我在启动容器时传递它们的方式(即docker run -e TEST_VAR=The\ value hello-world
)。如果您使用的是docker-compose
或env文件,请参阅the answer by @yamenk。
答案 2 :(得分:0)
在Dockerfile中使用双引号,不要使用单引号,因为它们不会扩展变量,摘自传递buildargs / envs到dockerfile并进入下面的python脚本:
def flatMap[B](f: A => Option[B]): Option[B] =
this match {
case None => None
case Some(a) => f(a)
}
答案 3 :(得分:0)
我的 docker-compose 案例,如果有帮助的话。我无法利用其他答案中的建议。
对于卷中的变量,我可以使用 .env
文件:
# .env
LOCAL_DIR=/local/path
对于带空格的变量(在我的例子中为 https://github.com/wolfcw/libfaketime)我不得不使用命令行:FAKETIME_ARG="@2021-02-11 13:23:02" docker-compose up
。
生成的 docker-compose 文件(注意 ${}
仅用于 LOCAL_DIR
):
# docker-compose.yml
services:
myservice:
build:
context: ./path/to/dir/of/Dockerfile
args:
- FAKETIME_ARG
volumes:
- ${LOCAL_DIR}:/path/in/container