【发布时间】: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