【问题标题】:Cannot Access Docker Container's Exposed Port无法访问 Docker 容器的暴露端口
【发布时间】:2019-09-10 03:33:04
【问题描述】:

您好,我无法访问暴露的端口。它是一个节点服务器(无框架)。 Chrome 发送 ERR_EMPTY_RESPONSE。每次我更改文件并对其进行测试时,我都会运行 docker-compose build。我怎样才能启动并运行它,以便我的浏览器可以 ping 端口 3000?

编辑:我包含了我的 server.js 文件,以防我在节点中绑定端口错误。

Dockerfile 

FROM node:8.11.1-alpine

WORKDIR /usr/src/app

VOLUME [ "/usr/src/app" ]

RUN npm install -g nodemon

EXPOSE 3000

CMD [ "nodemon", "-L", "src/index.js" ]

Docker-compose.yml

version: '3'

services:
  node:
    build:
      context: ./node
      dockerfile: Dockerfile
    working_dir: /usr/src/app
    volumes:
      - ./node:/usr/src/app
    networks:
      - app-network
    env_file: ./.env
    environment:
      - MESSAGE_QUEUE=amqp://rabbitmq
    ports:
    - "3000:3000"
    links:
      - rabbitmq

  python:
    build:
      context: ./python
      dockerfile: Dockerfile
    working_dir: /usr/src/app
    volumes:
       - ./python:/usr/src/app
    networks:
      - app-network
    env_file: ./.env
    links:
      - rabbitmq

  rabbitmq:
    image: rabbitmq:3.7.4
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

服务器.js

const mongoose = require('mongoose')

const hostname = '127.0.0.1';
const port = 3000;

const server = require('./controllers/index');

server.listen(port, hostname, () => {
    // Connect To Mongo 
    mongoose.connect(process.env.MONGO_URI, { keepAlive: true, keepAliveInitialDelay: 300000, useNewUrlParser: true });
    mongoose.connection.on('disconnected', () => {
        console.error('MongoDB Disconnected')
    })
    mongoose.connection.on('error', (err) => {
        console.error(err)
        console.error('MongoDB Error')
    })
    mongoose.connection.on('reconnected', () => {
        console.error('MongoDB Reconnected')
    })
    mongoose.connection.on('connected', () => {
        console.error('MongoDB Connected')
    })

    console.log(`Server running at http://${hostname}:${port}/`);
});

【问题讨论】:

  • 你能添加一些你的应用程序的源代码吗?至少是启动(Express?)服务器并指定绑定地址和端口的顶级代码?

标签: node.js docker docker-compose


【解决方案1】:

尝试像这样将您的应用绑定到 0.0.0.0

const hostname = '0.0.0.0';

它将侦听所有网络地址。

【讨论】:

  • 谢谢!!!你能添加一些关于为什么的上下文吗?谷歌搜索发现这一点太糟糕了,哈哈。
  • 在主机上下文中 0.0.0.0 是一种指定机器上所有 IPv4 地址的方法。由于您的应用程序位于容器中,因此您无法使用本地地址从外部访问它,因此 docker 为所有容器分配一个本地私有 ip(绑定暴露端口的位置),并使用 0.0.0.0 您的应用程序也将绑定到它。 see here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多