docker-compose 未定义的 process.env
Posted
技术标签:
【中文标题】docker-compose 未定义的 process.env【英文标题】:process.env undefined from docker-compose 【发布时间】:2019-08-12 03:44:54 【问题描述】:我在带有 webpack 的 nodejs 中有一个脚本,我想在其中使用来自 docker-compose 的环境变量,但每次变量都是 undefined
。
这是 docker-compose 的一小部分:
container:
image: "node:8-alpine"
user: "node"
working_dir: /home/node/app
environment:
- NODE_ENV=development
volumes:
- ./project:/home/node/app
- ./conf:/home/node/conf
command: "yarn start"
我有这个 webpack 配置:
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
const DefinePlugin = require('webpack').DefinePlugin;
module.exports =
entry: './src-js/widget.js',
mode: process.env.NODE_ENV || 'development',
output:
filename: 'widget.js',
path: path.resolve(__dirname, 'public')
,
optimization:
minimizer: [new TerserPlugin()]
,
plugins: [
new DefinePlugin(
ENV: JSON.stringify(process.env.NODE_ENV)
)
]
;
在我的节点脚本中我想使用 NODE_ENV 变量,所以我尝试了所有这些解决方案,但每次都是undefined
console.log(process.env.NODE_ENV);
console.log(ENV);
console.log(process.env); //is empty
我尝试从 docker 容器中打印环境变量,其中有 NODE_ENV,但我无法将它用于节点文件。为什么?
通常我使用yarn build
或yarn watch
重新编译它
【问题讨论】:
【参考方案1】:在你的 webpack 配置中试试这个:
new DefinePlugin(
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
)
此外,官方文档有一个snippet 关于它。
【讨论】:
但是我能问一下为什么它不能开箱即用吗?我希望 process.env 可以读取任何已定义的环境变量-.-以上是关于docker-compose 未定义的 process.env的主要内容,如果未能解决你的问题,请参考以下文章
Docker-compose 变量未传递到生产 vue 应用程序中
使用 docker-compose 时未注册到 eureka 的应用程序