點燈坊

失くすものさえない今が強くなるチャンスよ

從 Docker 傳遞環境變數給 Node

Sam Xiao's Avatar 2021-10-24

實務上常在 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,如 IPPORT 常常會隨著 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

env000

Conclusion

  • docker-compose.ymlenvironment 事實上就是 shell 的環境變數,因此可使用 Node 的 process.env 讀取

Reference

Felipe Dutra Tine e Silva, Pass environment variables from docker to my Nodejs.