将变量从Github操作传递到Docker映像构建 [英] Pass Variable From Github Action to Docker image build
问题描述
我一直致力于设置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
在我的Docker文件中,我放入了以下内容:
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},但没有成功。我做错了什么?
推荐答案
在Docker文件中的ENV
指令值中使用美元替换不会扩展到调用docker build
的主机的环境变量,而是替换为docker值。可以通过--build-arg ARG_NAME=ARG_VALUE
命令行参数传递给docker build
命令,然后可以在ENV
指令中将ARG_NAME
的值替换为$ARG_NAME
到ARG_VALUE
。
参见:https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg
您可以在Docker文件中使用ENV指令来定义变量值。这些值将保留在构建的映像中。然而,坚持不懈往往不是你想要的。用户希望根据他们在哪台主机上构建映像来指定不同的变量。 一个很好的例子是http_proxy或用于拉取中间文件的源版本。Arg指令允许Dockerfile作者定义用户可以在构建时使用--Build-Arg标志设置的值
该标志允许您传递构建时变量,这些变量像Dockerfile的Run指令中的常规环境变量一样被访问。此外,这些值不会像ENV值那样在中间或最终图像中持续存在。必须为每个生成参数添加--Build-Arg。
这篇关于将变量从Github操作传递到Docker映像构建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!