如何在docker-compose .env文件中将特殊字符(例如'=')作为变量值的一部分?

时间:2019-03-16 00:27:41

标签: docker kubernetes docker-compose

根据docker docs ,. env文件中的环境变量应该采用{-{1}}的键值格式,这对于VAR=VAL之类的示例来说效果很好,但没有提及不可避免的特殊字符例如'=',可能会混淆foo=bar分隔符或key-val的有效数据库连接字符串的两个部分,如下所示:

secrets.env文件:

space

在docker-compose.debug.yaml文件内容中称为:

 connectionString=Data Source=some-server;Initial Catalog=db;User ID=uid;Password=secretpassword

进一步将其转换为services: some-service: container_name: "service-name" env_file: - secrets.env ports: - "80:80" ,如下所示的完整流程:

enter image description here

所以问题是-如何包含具有docker-compose.yaml=作为值一部分的连接字符串?

需要-我们在VS解决方案中几乎没有微服务,并希望避免重复相同的连接字符串,否则需要docker-compose.yaml服务规范

尝试,在单引号/双引号中包含值,但将Spaces之后的转换后的值视为包含引号的值,就像kubernets yaml文件约定类似

1 个答案:

答案 0 :(得分:1)

我没有任何问题地进行了测试:

$ cat .env
ENV=default
USER_NAME=test2
SPECIAL=field=with=equals;and;semi-colons

$ cat docker-compose.env.yml
version: '2'

services:
  test:
    image: busybox
    command: env
    environment:
      - SPECIAL

$ docker-compose -f docker-compose.env.yml up
Creating network "test_default" with the default driver
Creating test_test_1_55eac1c3767c ... done
Attaching to test_test_1_d7787ac5bfc0
test_1_d7787ac5bfc0 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
test_1_d7787ac5bfc0 | HOSTNAME=d249a16a8e09
test_1_d7787ac5bfc0 | SPECIAL=field=with=equals;and;semi-colons
test_1_d7787ac5bfc0 | HOME=/root
test_test_1_d7787ac5bfc0 exited with code 0