[英]How can I expose two ports of the same nodejs app on docker
我在端口 3002 上運行一個節點 js 應用程序,並在同一個應用程序的端口 3003 上實現了一個套接字。
所以在本地主機中,當我點擊 3002 時,我可以點擊我的應用程序,當我點擊 3003 時,我可以連接到套接字。
我想使用 docker 實現相同的結果,但我無法連接到套接字。
這是我的 Dockerfile 和 docker-compose.yml 文件
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"]
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.