實務上常在 docker-compose.yml
設定環境變數給 Container,Node 該如何讀取這些環境變數呢 ?
Version
Node 13.1.0
Docker-compose
docker-compose.yml
version: "3"
services:
env:
image: env:${ENV_TAG}
container_name: MyEnv
environment:
- IP=${IP}
- PORT=${PORT}
在 docker-compose.yml
除了使用 ENV_TAG
設定 image 版本外,常常也使用 environment
設定環境變數給 Node,如 IP
與 PORT
常常會隨著 deployment 環境而決定。
.env
ENV_TAG=1.0.2
IP=10.134.228.193
PORT=4000
將環境變數寫在 .env
內。
Dockerfile
dockerfile
FROM node:lts-alpine
WORKDIR /usr/app
COPY package.json .
RUN yarn install
COPY dist/* ./
CMD [ "node", "index.js" ]
使用 dockerfile
將 Node 包成 image。
Node
src/index.js
console.log('Hello Docker');
console.log(process.env.IP || '0:0:0:0');
console.log(process.env.PORT || '80');
Node 可使用 process.env
讀取環境變數,若 user 沒設定環境變數為 undefined
,可使用 ||
提供預設值。
$ yarn docker:build
$ yarn docker:up
Conclusion
docker-compose.yml
的environment
事實上就是 shell 的環境變數,因此可使用 Node 的process.env
讀取
Reference
Felipe Dutra Tine e Silva, Pass environment variables from docker to my Nodejs.