使用Docker时无法读取Gatsby上的env文件

使用Docker时无法读取Gatsby上的env文件,docker,environment-variables,gatsby,Docker,Environment Variables,Gatsby,我对Docker有一个问题,基本上我创建了一个.env文件,前端服务使用该文件,如下所示: frontend: container_name: begreentannery_frontend build: context: ./frontend/ args: API_URL: ${API_URL} MAILCHIMP_ENDPOINT: ${MAILCHIMP_ENDPOINT} FORM_KEY:

我对Docker有一个问题,基本上我创建了一个.env文件,前端服务使用该文件,如下所示:

  frontend:
    container_name: begreentannery_frontend
    build: 
      context: ./frontend/
      args: 
        API_URL: ${API_URL}
        MAILCHIMP_ENDPOINT: ${MAILCHIMP_ENDPOINT}
        FORM_KEY: ${FORM_KEY}
        GOOGLE_ANALYTICS_ID: ${GOOGLE_ANALYTICS_ID}
        GOOGLE_TAG_MANAGER_ID: ${GOOGLE_TAG_MANAGER_ID}
        FACEBOOK_PIXEL_ID: ${FACEBOOK_PIXEL_ID}
    ports:
      - '3001:80'
    depends_on:
      - backend
后端服务实际上是一个与盖茨比合作的网站。当我启动应用程序进行
docker compose-up-build
时,我可以看到变量已正确地传递到
gatsby config
,例如:

console.log("API_URL:",process.env.API_URL)
但是如果我试图读取组件中的同一变量,我会得到
未定义的

这怎么可能?为什么我可以读取
gatsby config.js
中的所有环境变量,但不能读取组件中的所有环境变量

这怎么可能?为什么我可以读取里面的所有环境变量
gatsby config.js
但不在组件中

因为有和。第一个(服务器端)仅在节点服务器中可用(
gatsby config.js
gatsby Node.js
,等等),而第二个(客户端)仅在浏览器中可用(其余组件、页面和模板)

要使环境变量对浏览器可用,您需要在其前面加上
GATSBY
前缀,如文档所示:

除了在
.env.*
文件,您还可以定义OS Env变量。操作系统环境变量是 前缀为
GATSBY_uz
将在浏览器JavaScript中可用


嗨,谢谢你的回复。所以我必须在docker args中调用变量GATSBY_API_URL?没错。试试看。