dousou1878 2018-01-23 13:20 采纳率: 0%
浏览 4929

如何从.env文件获取环境变量并传递给Dockerfile?

对于开发人员来说,这似乎是一个巨大的疏忽,因为我无法理解您不希望映像构建了解.env变量的用例。

我运行Laravel,并使用.env文件访问一些AWS密钥。当我试图通过Dockerfile构建映像时,php compsoer autooload失败了,因为我的项目中的一个类试图使用.env变量实例化AWS S3Client(来自php SDK)。我根本不知道如何将环境变量从.env文件传递到Dockerfile。到目前

为止,我已经得到了这样的结果,它不是在进行映像构建,但是如果我只是运行容器,当然可以运行文件。

resource:
build: 
  context: ../server
  args:
    - AWS_REGION=${AWS_REGION}
    - AWS_VERISON=${AWS_VERISON}
    - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}
    - AWS_S3_CREDENTIALS_SECRET=${AWS_S3_CREDENTIALS_SECRET}
    - AWS_S3_CREDENTIALS_KEY=${AWS_S3_CREDENTIALS_KEY}
env_file: ./variables.env
ports:
  - "8080:80"
depends_on:
  - db
  - nosql
volumes:
  - ../server/app:/var/www/app:ro

Dockerfile,简称为Dockerfile,因为其他文件都正常工作,而且它是一个巨大的文件。

ARG AWS_REGION
ARG AWS_VERISON
ARG AWS_S3_BUCKET_NAME
ARG AWS_S3_CREDENTIALS_SECRET
ARG AWS_S3_CREDENTIALS_KEY

如何将变量传递给构建文件?下面是运行Composer脚本并创建容器入口点的docerfile部分:

RUN composer dumpautoload && \
php artisan clear-compiled --no-interaction && \
php artisan optimize --no-interaction

ENTRYPOINT  php artisan config:cache && \
        supervisord -n && \
        tail -F /var/www/storage/logs/*
</div>
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 05:05
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要从.env文件中获取环境变量并将其传递给Dockerfile,您可以按照以下步骤操作:

    1. 在您的项目根目录下创建或更新.env文件,其中包含您想要使用的环境变量和值。

    2. 使用 chmod 命令将.env 文件的所有者设置为当前用户,以便将来可以通过.env 文件进行更改。

      chmod a+rw .env
      
    3. .env 文件添加到Dockerfile中作为环境变量源。在Dockerfile中,您可以这样写:

      FROM node:latest
      
      # 加载环境变量
      ENV AWS_REGION $AWS_REGION
      ENV AWS_VERISON $AWS_VERISON
      ENV AWS_S3_BUCKET_NAME $AWS_S3_BUCKET_NAME
      ENV AWS_S3_CREDENTIALS_SECRET $AWS_S3_CREDENTIALS_SECRET
      ENV AWS_S3_CREDENTIALS_KEY $AWS_S3_CREDENTIALS_KEY
      
      # 创建容器
      RUN mkdir -p /app && cd /app && npm install && npm start
      
    4. 要确保./variables.env文件中的所有环境变量都被正确地应用到Dockerfile中,请确保其内容与上述Dockerfile中的环境变量名称相匹配。

    5. 保存并构建Docker镜像:

      docker build -t my-docker-image .
      
    6. 您现在应该能够成功构建并运行Docker镜像,其中包含了从.env文件中获取的环境变量。

    请注意,这种方法仅适用于Node.js应用程序,因为它依赖于NPM(Node Package Manager)。如果您正在使用其他编程语言或框架,则可能需要使用不同的方法来从.env文件中获取环境变量。例如,在Java应用程序中,您可能需要使用System.getenv()方法来读取环境变量。

    评论

报告相同问题?