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

del*_*lux 6 node.js docker dockerfile docker-compose 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"
Run Code Online (Sandbox Code Playgroud)

两个Dockerfile看起来都像:

FROM node:8.11.1
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)

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

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

pri*_*sar 11

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

process.env.BACKEND_SERVER
Run Code Online (Sandbox Code Playgroud)

在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"
Run Code Online (Sandbox Code Playgroud)