簡體   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