【问题标题】:How to pass environment variables from docker-compose into the NodeJS project?如何将环境变量从 docker-compose 传递到 NodeJS 项目中?
【发布时间】:2021-04-04 15:10:00
【问题描述】:

我有一个 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 文件,而是项目本身?

【问题讨论】:

  • 答案是肯定的。
  • 那行得通。但是当您在撰写世界时,您可以使用 service 名称作为参考(如果我理解正确的话)
  • @Stuart.Sklinar 那我怎么称呼它?不知道你指的是什么。
  • @RobertMoskal 如何做到这一点?
  • 对不起,我昨天在公共汽车上读到这个 ​​- 如果我理解正确,你可以在客户端配置中使用服务名称 server-side-app,因为 docker-compose 将创建一个网络,其中那些容器可以通过它们的服务名称来查找 - 同样@t-prisar 的解决方案效果很好!

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


【解决方案1】:

在 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"

【讨论】:

    猜你喜欢
    • 2019-06-06
    • 2020-11-07
    • 2018-08-23
    • 2020-02-23
    • 2020-12-17
    • 2021-11-27
    • 2017-09-18
    • 2020-09-29
    相关资源
    最近更新 更多