繁体   English   中英

如何在 docker 上公开同一个 nodejs 应用程序的两个端口

[英]How can I expose two ports of the same nodejs app on docker

我在端口 3002 上运行一个节点 js 应用程序,并在同一个应用程序的端口 3003 上实现了一个套接字。

所以在本地主机中,当我点击 3002 时,我可以点击我的应用程序,当我点击 3003 时,我可以连接到套接字。

我想使用 docker 实现相同的结果,但我无法连接到套接字。

这是我的 Dockerfile 和 docker-compose.yml 文件

Dockerfile

FROM node:16.15-alpine3.15 As development

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --ignore-scripts --only=development

COPY . .

RUN npm run build

FROM node:16.15-alpine3.15 As production

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --ignore-scripts --only=production

COPY . .

COPY --from=development /usr/src/app/dist ./dist

EXPOSE 3000
EXPOSE 3003

CMD ["node", "dist/main"]

码头工人-compose.yml

version: '3.8'

networks:
  global_network:
    external: true

services:
  cos_backend:
    image: 'node:16.15-alpine3.15'
    container_name: cos_backend
    restart: unless-stopped
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      -  "3002:3000"
      -  "3003:3000"
    networks:
      - global_network

第二个ports: number 始终与容器内的进程正在侦听的端口号匹配。

在您的示例中,您将主机端口 3002 重新映射到容器端口 3000,但您还将主机端口 3003 重新映射到同一端口(HTTP 端口)。 所以你需要更改第二个端口号

ports:
  - '3002:3000'  # host port 3002 -> container port 3000 (HTTP)
  - '3003:3003'  # host port 3003 -> container port 3003 (socket)
  #       ^^^^     second number is always the fixed container port

通常不需要两个端口号匹配。 重要的是第二个端口号与容器内运行的内容相匹配。

(在术语方面,“公开”指的是第一代 Docker 网络中的特定设置。在EXPOSE中公开您的容器将侦听的端口仍然是标准做法,但它实际上并没有做任何事情。我倾向于谈论Compose ports:设置。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM