【问题标题】:Can't escape "\" character in .env file readed by docker-compose无法转义 docker-compose 读取的 .env 文件中的“\”字符
【发布时间】:2020-03-18 14:16:13
【问题描述】:

无法使用 docker-compose 和 Python docker image (python:3.7.5-stretch) 从操作系统环境中正确设置/获取包含“\”字符的转义字符串。

.env 文件:

VAR1=abc
VAR2=ABC\{DEFGHIJ

码头工人撰写文件

version: '3'
services:
  python:
    env_file:
      - .env
...

来自 docker 的 python

>> print(os.environ["VAR1"])
'ABC'
>> print(os.environ["VAR2"])
'ABC\\{DEFGHIJ'

我做过的其他测试(.env => Python)

ABC\\{DEFGHIJ => ABC\\\\{DEFGHIJ 
ABC\\\{DEFGHIJ => ABC\\\\\\{DEFGHIJ 
'ABC\{DEFGHIJ' => "'ABC\\{DEFGHIJ'"
"ABC\{DEFGHIJ" => '"ABC\\{DEFGHIJ"'
'ABC\\{DEFGHIJ' => "'ABC\\\\{DEFGHIJ'"

【问题讨论】:

  • 你确定你变成了不可重现的'ABC\\{DEFGHIJ'
  • @LinPy 不。它给了"'ABC\\\\{DEFGHIJ'"。有趣的是,它在 Ubuntu 18 上运行良好,但在 Ubuntu 16 上却给出了如此奇怪的结果。
  • 你需要提供你所做的确切步骤,它适用于我使用 python:latest

标签: python docker environment-variables


【解决方案1】:

它在 Ubuntu 18(作为主机)上运行良好,但在 Ubuntu 16 上却给出了奇怪的结果。

我在python代码端解决了:

def os_env_escape(value: str) -> str:
    return value.encode("utf-8").decode("unicode-escape").encode("latin1").decode("utf-8")

>> print(os.environ["VAR2"])
'ABC\\{DEFGHIJ'
>> print(os_env_escape(os.environ["VAR2"]))
'ABC\{DEFGHIJ'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多