我一直致力于设置 Github Actions 工作流程来构建 docker 映像。我需要将环境变量传递到图像中,以便我的 Django 项目能够正确运行。不幸的是,当我构建图像时,它没有收到变量的值。
我的工作流程文件的相关部分:
- name: Build, tag, and push image to AWS ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
aws_ses_access_key_id: ${{ secrets.AWS_SES_ACCESS_KEY_ID }}
aws_ses_secret_access_key: ${{ secrets.AWS_SES_SECRET_ACCESS_KEY }}
DATABASE_ENGINE: ${{ secrets.DATABASE_ENGINE }}
db_host: ${{ secrets.DB_HOST }}
db_password: ${{ secrets.DB_PASSWORD }}
db_port: ${{ secrets.DB_PORT }}
db_username: ${{ secrets.DB_USERNAME }}
django_secret_key: ${{ secrets.DJANGO_SECRET_KEY }}
fcm_server_key: ${{ secrets.FCM_SERVER_KEY }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_ENV
在我的 Dockerfile 中,我添加了以下内容:
ENV aws_ses_access_key_id=$aws_ses_access_key_id aws_ses_secret_access_key=$aws_ses_secret_access_key DATABASE_ENGINE=$DATABASE_ENGINE db_host=$db_host db_password=$db_password db_port=$db_port db_username=$db_username django_secret_key=$django_secret_key fcm_server_key=$fcm_server_key
没有任何变量传递。我尝试使用 $variable_name 和 ${variable_name} 但没有成功。我究竟做错了什么?
使用美元替代价值ENV
Dockerfile 中的指令不会扩展为环境主机的变量docker build
被调用,但被替换为 DockerARG
值,您可以通过--build-arg ARG_NAME=ARG_VALUE
命令行参数docker build
命令,然后你可以替换的值ARG_NAME
as $ARG_NAME
to ARG_VALUE
在你的ENV
操作说明。
See: https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg
您可以在 Dockerfile 中使用 ENV 指令来定义变量值。这些值保留在构建的映像中。然而,很多时候坚持并不是你想要的。用户希望根据他们在哪个主机上构建映像来指定不同的变量。
一个很好的例子是 http_proxy 或用于拉取中间文件的源版本。 ARG 指令允许 Dockerfile 作者定义用户可以使用 --build-arg 标志在构建时设置的值
该标志允许您传递构建时变量,这些变量像 Dockerfile 的 RUN 指令中的常规环境变量一样被访问。此外,这些值不会像 ENV 值那样保留在中间或最终图像中。您必须为每个构建参数添加 --build-arg。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)