【问题标题】:Docker doesnt read env file but no error showedDocker 不读取 env 文件但没有显示错误
【发布时间】:2020-03-07 08:15:18
【问题描述】:

我有一个 python 脚本:

os.environ["MY_VAR"]

docker-compose.yml 看起来像:

version: '1'
services:
  webserver:
    build: .
    ports:
      - "8080:8080"
    environment:
      MY_VAR: ${MY_VAR}

Dockerfile:

FROM ubuntu
ENV PYTHONUNBUFFERED 1
ADD ./.env ./
RUN pip install -r docker_src/requirements.pip
CMD tail -f /dev/null

.env文件

# AWS
MY_VAR=home

如果我执行docker-compose config,则变量会显示为预期值。然后,我运行 docker docker-compose up -d --build,然后运行 ​​python 脚本,它返回失败:

  File "/usr/lib/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'MY_VAR'

【问题讨论】:

    标签: python docker environment-variables


    【解决方案1】:

    首先,您还应该使用最新版本的 docker-compose version: '3',然后传递 MY_VAR

    export MY_VAR=test && docker-compose up
    

    当你使用时

        environment:
          MY_VAR: ${MY_VAR}
    
    

    它在主机环境变量中寻找MY_VAR

    或者,如果您想使用 .env,那么您已经对 env 文件进行了 sepcify。

    version: '3'
    services:
      webserver:
        build: .
        ports:
          - "8080:8080"
        env_file:
           - .env
    

    更新:

    简单例子

    version: '3'
    services:
      webserver:
        image: alpine
        command: printenv
        env_file:
           - .env
    
    

    和.env

    MY_ENV1=test1
    MY_ENV1=test2
    

    【讨论】:

    • 我使用版本 3 和 3.7 来解决问题,但没有任何效果。您告诉我的 env_file 选项都不是。我向 dockerfile 添加了一个 var 并且可以正常工作,但在 docker-compose.yml 中没有
    • 还是一样。如果我使用 command:printenv 选项,它会显示值,但是在 docker 中运行脚本时,os.environ 没有变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多