我正在尝试设置一个Dockerized 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应用程序提供服务。
服务:foo:建立:。重启:总是环境:-NODE_ENV =生产端口:-“ 3000:3000”酒吧:建立:。重启:总是环境:-NODE_ENV =生产端口:-“ 8080:8080”baz:建立:。重启:总是环境:-NODE_ENV =生产端口:-“ 9000:9000”