如何将环境变量从docker-compose传递到NodeJS项目?

时间:2018-10-04 15:45:19

标签: node.js docker docker-compose dockerfile docker-image

我有一个NodeJS应用程序,我想要docker-size。

该应用程序包含两个部分:

  • 服务器部分,运行正在从数据库获取数据的API。它在端口3000上运行;

  • 客户端部分,它正在从服务器部分调用API端点。它正在端口8080上运行;

有了这个,我的客户端部分有一个名为“ server_address”的变量,其值为“ localhost:3000”。但事实是,两个项目都应在单独的Dockerimage文件中按docker大小放置,并在一个docker-compose.yml文件中合并。

因此由于某些原因,我必须通过docker-compose.yml文件运行docker容器。那么有可能以某种方式连接这些东西并将服务器地址从dockerfile外部传递到NodeJS项目吗?

docker-composer.yml

version: "3"
services:
  client-side-app:
    image: my-client-side-docker-image
    environment:
      - BACKEND_SERVER="here we need to enter backend server"
    ports:
      - "8080:8080"
  server-side-app:
    image: my-server-side-docker-image
    ports:
      - "3000:3000"

两个 Dockerfile 都像这样:

FROM node:8.11.1
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

通过拥有这些文件,我很担心:

  • 我可以在项目中以某种方式使用变量BACKEND_SERVER吗?如果是的话,该怎么做?我不是指Dockerimage文件,而是项目本身吗?

1 个答案:

答案 0 :(得分:4)

像这样在node.js代码中使用process.env

process.env.BACKEND_SERVER

在docker-compose文件中提及您的变量。

version: "3"
services:
  client-side-app:
    image: my-client-side-docker-image
    environment:
      - BACKEND_SERVER="here we need to enter backend server"
    ports:
      - "8080:8080"
  server-side-app:
    image: my-server-side-docker-image
    ports:
      - "3000:3000"