这适用于那些希望在构建期间将环境变量从docker -compose using .env
file 传递到dockerfile ,然后将这些 args 作为 env 变量传递给容器的人。典型的 docker-compose 文件
services:
web:
build:
context: ./api
dockerfile: Dockerfile
args:
- SECRET_KEY=$SECRET_KEY
- DATABASE_URL=$DATABASE_URL
- AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
将文件中存在的环境变量传递.env
给构建命令中的 args。典型.env
文件
SECRET_KEY=blahblah
DATABASE_URL=dburl
现在,当您运行 docker-compose up -d 命令时,docker-compose 文件从 .env 文件中获取值,然后将其传递给 docker-compose 文件。现在,Web 的 Dockerfile 在构建期间通过 args 包含所有这些变量。现在典型的web dockerfile,
FROM python:3.6-alpine
ARG SECRET_KEY
ARG DATABASE_URL
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_BUCKET
ARG AWS_REGION
ARG CLOUDFRONT_DOMAIN
ENV CELERY_BROKER_URL redis://redis:6379/0
ENV CELERY_RESULT_BACKEND redis://redis:6379/0
ENV C_FORCE_ROOT true
ENV SECRET_KEY ${SECRET_KEY?secretkeynotset}
ENV DATABASE_URL ${DATABASE_URL?envdberror}
现在我们在 dokcerfile 中收到了这些 secret_key 和 db url 作为 arg。现在让我们在ENV
as中使用它们ENV SECRET_KEY ${SECRET_KEY?secretkeynotset}
。现在甚至 docker 容器在它的环境中也有这些变量。
记住不要使用ARG $SECRET_KEY
(我这样做了)。它应该是ARG SECRET_KEY