声明env变量哪个值包含docker / docker-compose的空间

时间:2017-09-10 13:20:23

标签: docker docker-compose

我有一个像这样的env变量值:
TEST_VAR=The value

有人知道这是否合法吗?我应该将"放在这个值的周围,以便在docker中根据需要进行解释吗? 感谢

编辑:引号不是一个好的解决方案,因为它将成为val的一部分,请参阅参考here

4 个答案:

答案 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