当前位置: 首页 > 知识库问答 >
问题:

无法从docker composeenv文件访问环境变量

督灿
2023-03-14

我在从 docker-compose.yml 文件(版本 -3.7)读取 .env 变量时遇到问题,这里首先我解释我的文件夹和示例代码结构

我的文件夹结构

my_app

>

  • src

    • config.py
    • app.py
    • requirements.txt
    • 其他文件

    Dockerfile

    docker-compose.yml

    .包封/包围(动词envelop的简写)

    .env文件

    这是我的示例 .env 文件

    
    
        ENVIRONMENT_NAME=DEV
        DATABASE_NAME=testing
    
    

    docker-compose.yml文件

    这是我的docker作曲样本。yml文件(版本:3.7)

    
    
        version: "3.7"
        services:
            my_app_test:
                env_file: ./.env
                image: my-app-test
                build:
                    context: ./src
                    dockerfile: Dockerfile
    
    

    Dockerfile

    这是我的Dockerfile示例

    
    
        FROM python:3.7-alpine
        
        # Install required packages
        RUN apk add --update --no-cache \
            build-base \
            postgresql-dev \
            linux-headers \
            pcre-dev \
            py-pip \
            bash \
            curl \
            openssl \
            nginx \
            libressl-dev \
            musl-dev \
            libffi-dev \
            rsyslog \
            && pip install Cython
        
        # Create container's working directory
        RUN mkdir -p /MyApp
        # Copy all source files to the container's working directory
        COPY ./ /MyApp
        # Install all python dependency libs
        RUN pip install -r /MyApp/requirements.txt
        
        WORKDIR /MyApp
        ENTRYPOINT ["python3"]
    
    

    src/config.py

    在配置文件中,我正在读取所有环境变量

    
    
        import os
        from pathlib import Path    
        from dotenv import load_dotenv
        
        ENV_PATH = Path('.env')
        load_dotenv(dotenv_path=ENV_PATH)
        
        ENVIRONMENT_NAME = os.getenv('ENVIRONMENT_NAME')
        DATABASE_NAME = os.getenv("DATABASE_NAME")
    
    

    src/app.py

    在 app.py 文件中,我从 config.py 获取变量并在我的项目中使用它。当我在构建 docker 映像后运行此文件时,它无法按预期工作。所有 env 变量都读作 None

    
    
        import config
        import os
        
        print(config.ENVIRONMENT_NAME)
        print(config.DATABASE_NAME)
        
        # Access all environment variables
        print('\n')
        print(os.environ)
    
    

    我正在尝试从 docker-compose 文件而不是从 Dockerfile 访问环境集。

    Docker构建工作正常,之后,当我尝试运行Docker映像(sudo Docker运行我的应用程序测试app.py)时,它没有像我预期的那样打印环境变量。当前代码的输出是,

    
    None 
    
    None 
    
    environ({'PATH': '/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'HOSTNAME': '6cfc0c912772', 'LANG': 'C.UTF-8', 'GPG_KEY': '0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D', 'PYTHON_VERSION': '3.7.5', 'PYTHON_PIP_VERSION': '19.3.1', 'PYTHON_GET_PIP_URL': 'https://github.com/pypa/get-pip/raw/ffe826207a010164265d9cc807978e3604d18ca0/get-pip.py', 'PYTHON_GET_PIP_SHA256': 'b86f36cc4345ae87bfd4f10ef6b2dbfa7a872fbff70608a1e43944d283fd0eee', 'HOME': '/root'})
    
    

    我使用的要求是,

    1. python=3.7
    2. python-做十个v==0.12.0

    我想解决这个环境阅读问题。我不知道问题出在哪里,@任何人请帮我解决这个问题。

  • 共有2个答案

    汪高岑
    2023-03-14

    < code>docker run不会找到< code>env文件,因为该env文件是在< code>docker-compose.yml文件中指定的。

    试着像这样运行你的容器:

    docker-compose run my_app_test app.py
    
    秦新立
    2023-03-14

    您没有在构建时设置 ENV,因此 docker-compose 将能够在您在撰写文件中设置配置时读取 env 文件,但 docker run 不会读取 env,因为您需要指定 env 文件

    您需要在docker run命令中指定env-file

    docker run --env-file .env my-app-test app.py
    

    或只检查环境

    docker run --env-file .env --entrypoint printenv my-app-test
    

    或运行堆栈

    docker-compose up
    
     类似资料:
    • 我必须从我的 Groovy 脚本访问一个环境变量。我没有使用詹金斯。如何获取变量?

    • 我已经在windows上设置了环境变量,实际上当我回显它们时,我可以看到它们的详细信息,但是,当我运行测试时,它们似乎看不到环境变量。我见过类似的问题,但它们没有帮助。像这个,这个等等,但是运气不好。 这是我的应用程序测试。属性文件 那么,这就是我得到的例外:

    • 问题内容: 我正在尝试在Jenkins中使用DSL管道。我认为如果可以将项目名称用作脚本的一部分,那就太好了。 我得到错误: 我以为我遵循了这些指示,并且将其作为变量之一。 我决定尝试: 在我的DSL中,结果显示为: 这是我所期望的。 另一个博客提到: 使用环境变量 我们有两种方法来获取它们的价值。在启动过程中传递的属性,由于Groovy与Java的紧密联系,我们可以理解为。 以Java方式读取普

    • 当试图使用webapp(使用Elixir/Ecto作为后端语言)、postgres数据库、elasticsearch和kibana创建一个项目时,使用以下docker-compose.yaml文件: ,

    • 本文向大家介绍python访问系统环境变量的方法,包括了python访问系统环境变量的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python访问系统环境变量的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。

    • 如果有人能帮忙,那就太好了!