使用GitHub Actions构建推送DockerHub前生成dotenv文件问题咨询
问题根因
- GitHub Actions 不同Job运行在完全独立的临时虚拟机中,
dotenvJob生成的.env文件无法被后续的dockerJob读取,两个Job的文件系统完全隔离。 - 生成
.env的命令全部使用>覆盖写入,执行完成后文件内仅会保留最后一行NAME_DB的配置,其余配置都会被覆盖。
修复步骤
- 把生成
.env的步骤合并到dockerJob中,放在Checkout步骤之后,同时把除第一行外的覆盖写入符>改为追加写入符>>,第一行保留>用于清空原有内容。
修改后的工作流配置参考:
on: push: branches: - 'main' pull_request: branches: - 'main' jobs: docker: runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v2 - name: generate dotenv for go run: | echo DB_USER=${{ secrets.SECRET_USER_DB }} > .env echo PASSWORD_DB=${{ secrets.SECRET_PASSWORD_DB }} >> .env echo HOST_DB=${{ secrets.SECRET_HOST_DB }} >> .env echo PORT_DB=${{ secrets.SECRET_PORT_DB }} >> .env echo NAME_DB=${{ secrets.SECRET_NAME_DB }} >> .env - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push uses: docker/build-push-action@v2 with: context: . push: true repository: dall06/go_api_image file: .docker/Dockerfile.prod tags: dall06/go_api_image:latest
- 现有Dockerfile的
COPY . .逻辑会自动把工作目录下生成的.env文件复制到容器内的/app路径下,无需额外修改。如果你的Go程序读取.env的路径不是相对工作目录的./.env,需要对应调整读取路径或者.env的存放位置。
注意:将敏感配置的
.env文件直接打包进镜像存在安全泄露风险,生产环境更推荐在容器启动时通过环境变量注入的方式传递敏感配置,不要把秘钥硬编码到镜像内。
内容的提问来源于stack exchange,提问作者Diego Alberto León López
相关产品推荐
相关产品推荐

