简体   繁体   中英

Can't escape “\” character in .env file readed by docker-compose

Can't set/get from OS environments properly escaped string that containing "\" char, using docker-compose and Python docker image (python:3.7.5-stretch).

.env file:

VAR1=abc
VAR2=ABC\{DEFGHIJ

docker-compose file

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

python from docker

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

Other tests I've done (.env => Python)

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

It works fine on Ubuntu 18 (as a host), but it gives such strange results on Ubuntu 16.

I solved it on the python code side:

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'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM