Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在单个Docker容器下具有多个服务器的节点应用程序返回404,用于某些服务器/端口_Node.js_Docker_Docker Compose_Pm2 - Fatal编程技术网

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

Node.js 在单个Docker容器下具有多个服务器的节点应用程序返回404,用于某些服务器/端口,node.js,docker,docker-compose,pm2,Node.js,Docker,Docker Compose,Pm2,我正在尝试设置一个停靠节点应用程序,它通过pm2运行时运行三个节点服务器。这三台服务器位于一个容器中。同样的设置在Docker外部的localhost上运行得很好,但是Docker版本(对于某些端口)中返回404错误时,我遇到了一些问题。这是我的Dockerfile: FROM node:latest # Create the workdir. RUN mkdir /myapp WORKDIR /myapp # Install packages. COPY package*.json ./

我正在尝试设置一个停靠节点应用程序,它通过pm2运行时运行三个节点服务器。这三台服务器位于一个容器中。同样的设置在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"]
My 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(我确实在其中定义了其他服务,但在本例中已将其拆分为单个服务。我仅使用此服务进行了测试,但仍然面临相同的问题):

我面临的问题是,虽然我可以访问端口3000上的foo服务器,但其他服务器给了我404。值得注意的是,bar和baz服务器是通过axios调用访问的。但我不明白为什么在本地运行时没有问题的情况下,它们返回404错误。此外,所涉及的资源位于我的静态文件夹的子文件夹中


会发生什么事?我的docker compose端口定义有问题吗?

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

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"

你能试着在三个不同的端口上运行三个
foo.js
实例,看看是否会出现同样的错误吗?这将排除其他两个服务的任何错误配置。
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"