【发布时间】:2021-07-02 00:41:09
【问题描述】:
我是 nodejs 新手,我不明白为什么环境变量并不总是可用。
.env 中的环境变量由 docker-compose 自动解析。所以我没有使用 dotenv 包。
console.log(process.env.API_URL) // outputs undefined
但是在异步函数中(也许它不适用于所有异步函数)
async function foo() {
console.log(process.env.API_URL) // outputs http://example.com
}
在我的index.ts 中移动console.log 几种方式后,我找到了 env vars 可用的行:
// index.ts
import {createConnection} from 'typeorm'
console.log(process.env.API_URL) // outputs undefined
createConnection()
console.log(process.env.API_URL) // outputs http://example.com
知道为什么会这样吗?
编辑:
我正在使用这个 docker-compose.yml :
version: '3.7'
services:
server:
build:
context: ./docker-build
target: server-develop
ports:
- "3200:3000"
volumes:
- .:/var/app
command: "yarn run dev"
Docker docs 似乎告诉.env 文件在未指定 env_file 时默认被解析。来自 docker 文档的屏幕截图:
但是,我在使用 docker-compose exec server env 时看不到环境变量。
但是,如果我在 docker-compose.yml 中指定 env_file(见下文),则正确加载了环境变量。
version: '3.7'
services:
server:
build:
context: ./docker-build
target: server-develop
env_file: .env # the only change
ports:
- "3200:3000"
volumes:
- .:/var/app
也许我误解了 docker 说的是什么
默认加载.env文件
【问题讨论】:
标签: node.js docker docker-compose environment-variables typeorm