Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Javascript docker-compose.yml中的绑定端口不';行不通_Javascript_Node.js_Docker_Docker Compose - Fatal编程技术网

Javascript docker-compose.yml中的绑定端口不';行不通

Javascript docker-compose.yml中的绑定端口不';行不通,javascript,node.js,docker,docker-compose,Javascript,Node.js,Docker,Docker Compose,我有一个使用docker-compose.yml创建的NodeJS和React应用程序,我试图将我的应用程序放在端口:8090,但是当我执行curl时,我得到了这个错误 curl localhost:8090 curl: (56) Recv failure: Connection reset by peer docker-compose.yml version: '3.1' services: web: build: context: . args:

我有一个使用docker-compose.yml创建的NodeJS和React应用程序,我试图将我的应用程序放在端口
:8090
,但是当我执行
curl
时,我得到了这个错误

curl localhost:8090
curl: (56) Recv failure: Connection reset by peer
docker-compose.yml

version: '3.1'

services:

  web:
    build: 
      context: .
      args:
        # Variaveis do frontend
        - BACKEND_URL=http://localhost:8090
    restart: always
    container_name: petcertificados
    ports:
      - "8090:8080"
    volumes:
      - ./certificados:/usr/app/server/certificados
如果我进入我的容器,我可以访问我的网站,但如果我在外面就不能

[root@blastoise certificados]# docker exec -it petcertificados /bin/bash
root@a0d690c11c38:/usr/app/server# curl localhost:8080/api
<!DOCTYPE html>
<html>
  <head>
    <title>Certificados - Backend</title>
  </head>
  <body>
    <h3>Certificados - BackEnd</h3>
  </body>
我试着放“0.0.0.0”,但这已经是NodeJS的默认值了

[编辑2] Dockerfile

FROM node:14.5.0 as frontend

WORKDIR /usr/app/frontend

COPY frontend/package*.json ./
RUN npm install -qy

COPY frontend/ ./

ARG BACKEND_URL
ENV REACT_APP_BACKEND_URL ${BACKEND_URL}

RUN npm run build

FROM node:14.5.0
WORKDIR /usr/app/ 

COPY --from=frontend /usr/app/frontend/build ./frontend/build

WORKDIR /usr/app/server/
COPY backend/package*.json ./

RUN npm install -qy
COPY backend/ ./

CMD ["npm", "start"]

通过稍微修改Dockerfile/app.js,我能够卷曲localhost:8090并获得响应

Dockerfile:

FROM node:14-alpine

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 8080

CMD [ "node", "app.js" ]
App.js

const express = require('express')
const app = express();
const path = require('path');
const cors = require('cors')

const CLIENT_BUILD_PATH = path.join(__dirname, '../../frontend/build');
app.use(express.static(CLIENT_BUILD_PATH));

app.use(express.json());

app.use(cors());
app.use((req, res, next) => {
    next();
})

app.get('/', (req, res) => {
    res.send('Hello world!')
});

app.listen(8080, '0.0.0.0', () => { 
    console.info(`Iniciando PETCertificados!`)
});

docker-compose.yml保持不变。

您是否可以编辑该问题,使其包含应用程序代码,至少设置网络侦听器?此问题的一个常见原因是应用程序绑定到容器专用localhost接口127.0.0.1,而它需要绑定到所有接口0.0.0.0。@DavidMaze是!我包括了这些信息!您的Dockerfile也会有所帮助here@JaredBeach就在那里!尝试将
EXPOSE 8080
添加到Dockerfile中不幸的是,这不起作用<代码>曝光8080;CMD[“npm”,“start”]和
app.listen(8080,'0.0.0',()=>{console.info(“Iniciando PETCertificados!”))我仍然得到
[root@blastoisecertificados]#curl localhost:8090 curl:(56)Recv故障:对等方重置连接
可能是代码中没有问题,可能是我的机器出了什么问题。如果物理机器的8080端口上还没有运行任何东西,请尝试映射到该端口,而不是8090。所以“8080:8080”。查看端口是否是问题所在。否则,尝试除去docker文件中除了后端(例如react应用程序)之外的所有内容,然后看看它是否有效
const express = require('express')
const app = express();
const path = require('path');
const cors = require('cors')

const CLIENT_BUILD_PATH = path.join(__dirname, '../../frontend/build');
app.use(express.static(CLIENT_BUILD_PATH));

app.use(express.json());

app.use(cors());
app.use((req, res, next) => {
    next();
})

app.get('/', (req, res) => {
    res.send('Hello world!')
});

app.listen(8080, '0.0.0.0', () => { 
    console.info(`Iniciando PETCertificados!`)
});