我尝试根据此链接验证秘密是否正确应用,但与我的预期相反,它不起作用。
这里有一个和我类似的问题: 将秘密从 git 操作传递到 docker 镜像作为环境变量
工作流程
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v5
with:
context: apps/vc-screening-service
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
secrets: |
"VC_MYSQL_USER=${{ secrets.VC_MYSQL_USER }}"
Dockerfile
# syntax=docker/dockerfile:1
FROM alpine
RUN --mount=type=secret,id=VC_MYSQL_USER \
VC_MYSQL_USER=$(cat /run/secrets/VC_MYSQL_USER)
GitHub Actions 输出
Docker 运行输出:
docker run -it 997245385850.dkr.ecr.ap-northeast-2.amazonaws.com/dev/vc-screening-service:latest sh
/ # env
HOSTNAME=6a893ca9c566
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
/ #
缺少环境变量
VC_MYSQL_USER
。我在这里做错了什么?
- uses: docker/build-push-action@v5
with:
context: apps/vc-screening-service
build-args: |
"VC_MYSQL_USER=${{ secrets.VC_MYSQL_USER }}"
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
secrets: |
"VC_MYSQL_USER=${{ secrets.VC_MYSQL_USER }}"
您没有将 VC_MYSQL_USER 作为构建参数传递,您需要添加 ARG VC_MYSQL_USER 也在你的 dockerfile 中
# syntax=docker/dockerfile:1
FROM alpine
ARG VC_MYSQL_USER
RUN --mount=type=secret,id=$VC_MYSQL_USER \
VC_MYSQL_USER=$(cat /run/secrets/$VC_MYSQL_USER)
您的工作流程定义正确传递了机密。 线
RUN --mount=type=secret,id=VC_MYSQL_USER \
VC_MYSQL_USER=$(cat /run/secrets/VC_MYSQL_USER)
本身不做任何事情。它是您要在 Dockerfile 中运行的命令的前缀,例如
RUN --mount=type=secret,id=VC_MYSQL_USER \
VC_MYSQL_USER=$(cat /run/secrets/VC_MYSQL_USER) \
echo $VC_MYSQL_USER # this will produce *** in Github Actions log
RUN --mount=type=secret,id=VC_MYSQL_USER \
VC_MYSQL_USER=$(cat /run/secrets/VC_MYSQL_USER) \
npm generateSchemaFromMySQL # use DB access from secrets to generate code
RUN npm build # build the service using generated files