在单个Docker容器下具有多个服务器的节点应用,对于某些服务器/端口,返回404

问题描述 投票:0回答:1

我正在尝试设置一个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.js docker docker-compose pm2
1个回答
0
投票

我认为您必须为每个Node应用程序提供服务。

服务:foo:建立:。重启:总是环境:-NODE_ENV =生产端口:-“ 3000:3000”酒吧:建立:。重启:总是环境:-NODE_ENV =生产端口:-“ 8080:8080”baz:建立:。重启:总是环境:-NODE_ENV =生产端口:-“ 9000:9000”

© www.soinside.com 2019 - 2024. All rights reserved.