node.js - 在单个 Docker 容器下具有多个服务器的节点应用程序对于某些服务器/端口返回 404
问题描述
我正在尝试设置一个 Dockerised Node 应用程序,它通过 pm2-runtime 运行三个 Node 服务器。三台服务器位于一个容器中。相同的设置在 Docker 外部的 localhost 上完美运行,但我遇到了 Docker 版本(对于某些端口)返回 404 错误的问题。这是我的 Dockerfile:
FROM node:latest
# Create the workdir.
RUN mkdir /myapp
WORKDIR /myapp
# Install packages.
COPY package*.json ./
RUN npm install
# Install pm2 globally.
RUN npm install -g pm2
# Copy source code to the container.
COPY . ./
# Run the servers with pm2-runtime.
#MD ["pm2-runtime", "process.yml"]
我的 process.yml:
apps:
- script : ./dist/foo.js
name : 'foo'
instances: 2
env :
NODE_ENV: production
- script : ./dist/bar.js
name : 'bar'
instances: 2
env :
NODE_ENV: production
- script : ./dist/baz.js
name : 'baz'
instances: 2
env :
NODE_ENV: production
这是我的 docker-compose.yml (我确实在其中定义了其他服务,但在此示例中已将其剥离为单个服务。我仅使用此服务进行了测试,但仍然面临同样的问题):
version: "3"
services:
myapp:
build: .
restart: always
environment:
- NODE_ENV=production
ports:
- "3000:3000"
- "8080:8080"
- "9000:9000"
networks:
- my-network
networks:
my-network:
我面临的问题是,虽然我可以访问端口 3000 上的 foo 服务器,但其他服务器给我一个 404。值得注意的是,bar 和 baz 服务器是通过 axios 调用访问的。但是我不明白为什么他们在本地运行没有问题时返回404错误。有问题的资源也在我的静态文件夹的子文件夹中。
会发生什么?我的 docker-compose 端口定义有问题吗?
解决方案
我认为您必须为每个 Node 应用程序提供服务。
services:
foo:
build: .
restart: always
environment:
- NODE_ENV=production
ports:
- "3000:3000"
bar:
build: .
restart: always
environment:
- NODE_ENV=production
ports:
- "8080:8080"
baz:
build: .
restart: always
environment:
- NODE_ENV=production
ports:
- "9000:9000"
推荐阅读
- regex - 在正则表达式中包含“顺序”,但使用 python 在正则表达式中排除“顺序”
- python - 无法从 PyPi 包外部读取 TXT 文件
- r - `testthat::expect_silent()` 似乎没有注意到 ggplot2 错误
- progressive-web-apps - 如何为 Web-push 选择合适的 TTL 值?
- c# - 调用外部库方法时任务超时后未结束
- r - 使用正则表达式区分 \q{} 和 \cite{} 的困难
- python - PyDub 从变量播放音频
- python - Python 中的预测值
- powershell - 未调用时设置执行策略错误
- dart - 从自定义输入小部件中获取值