簡體   English   中英

docker-compose.yml 中的綁定端口不起作用

[英]Bind port in docker-compose.yml doesn't work

我有一個使用 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>

因為在我的個人電腦上這是有效的,我認為可能是機器中的docker有錯誤。 Docker version 19.03.13, build 4484c46d9d版本是Docker version 19.03.13, build 4484c46d9d ,我在 CentOS 中。 我試圖用service docker restart docker 但不起作用,我不知道可能是什么。

[編輯 1]我在 index.js 中設置端口配置並啟動應用程序

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

const { BACKEND_PORT } = require("./constants/index.js");

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('/api', (req, res) => {
    res.sendFile(path.join(__dirname, 'views', 'index.html'));
});

app.use('/api/certificados', require('./routes/Certificados'));
app.use('/api/eventos', require('./routes/Eventos'));

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

我試圖把“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,我可以 curl localhost:8090 並得到響應。

Dockerfile:

FROM node:14-alpine

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 8080

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

應用程序.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 保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM