You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub Actions构建推送DockerHub前生成dotenv文件问题咨询

问题根因
  • GitHub Actions 不同Job运行在完全独立的临时虚拟机中,dotenv Job生成的.env文件无法被后续的docker Job读取,两个Job的文件系统完全隔离。
  • 生成.env的命令全部使用>覆盖写入,执行完成后文件内仅会保留最后一行NAME_DB的配置,其余配置都会被覆盖。
修复步骤
  1. 把生成.env的步骤合并到docker Job中,放在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
  1. 现有Dockerfile的COPY . .逻辑会自动把工作目录下生成的.env文件复制到容器内的/app路径下,无需额外修改。如果你的Go程序读取.env的路径不是相对工作目录的./.env,需要对应调整读取路径或者.env的存放位置。

注意:将敏感配置的.env文件直接打包进镜像存在安全泄露风险,生产环境更推荐在容器启动时通过环境变量注入的方式传递敏感配置,不要把秘钥硬编码到镜像内。

内容的提问来源于stack exchange,提问作者Diego Alberto León López

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:18:02