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

lc8prwob  于 2023-02-15  发布在  Docker
关注(0)|答案(2)|浏览(220)

我有一个NodeJS应用程序,我想将其调整为停靠大小。
该应用程序由两部分组成:

  • 服务器部分,运行一个从数据库获取数据的API,运行在3000端口;
    • 客户端部分,其从服务器部分调用API端点。这在端口8080上运行;

这样,我的客户端部分就有了一个名为“server_address”的变量,它的值为“localhost:3000”。但问题是,这两个项目应该在一个单独的Dockerimage文件中按码头大小排列,然后合并到一个docker-compose.yml文件中。
由于某些原因,我不得不通过docker-compose.yml文件来运行docker容器,那么是否有可能以某种方式连接这些东西,并将服务器地址从dockerfile外部传递到NodeJS项目中?

停靠- 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文件,而是引用项目本身?
xlpyo6sf

xlpyo6sf1#

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

qmb5sa222#

除了前面的答案之外,您还可以在运行容器时定义变量及其值:

docker run --env variable1=value1 --env variable2=value2 <image>

另外两种不同的方式是:(1)引用已经导出到本地环境的环境变量,以及(2)从文件加载变量:
(一)

# In your ~/.bash (or ~/.zshrc) file: export VAR1=value1
docker run --env VAR1 <image>

(二)

cat env.list
# Add the following in the env.list
# variable1=value1
# variable2=value2
# variable3=value3
docker run --env-file env.list <image>

如果您不想在docker-compose文件中提及您的变量,这些选项非常有用。
参考文献

相关问题