我无法通过公共IP访问我的Docker Node.js容器

时间:2019-10-04 09:28:55

标签: node.js docker docker-compose ip

我有一个Docker Node.js容器,使用我的公共IP侦听带有NET库的端口4757。

server listening on {"address":"144.xxx.xxx.66","family":"IPv4","port":4757}

当我从计算机访问时没有问题,但是如果尝试访问移动设备或其他设备,则连接被拒绝(ERR_ADDRESS_UNREACHABLE)。

  • 我禁用了Linux防火墙。
  • 如果对我的公共IP进行ping操作,则它可以正常工作。
  • 我在具有LAN Host 192.168.1.128 TCP和UPD的路由器ZTE(Yoigo)中打开了端口4757

该应用程序在其他笔记本电脑中由docker-composer正常工作,问题出在我的新笔记本电脑中。这是我的local.yml

version: '3'

volumes:
  local_postgres_data: {}
  local_postgres_data_backups: {}

services:
  django: &django
  build:
    context: .
    dockerfile: ./compose/local/django/Dockerfile
  image: hegeo_local_django
  depends_on:
    - postgres
  volumes:
    .:/app
  env_file:
    - ./.envs/.local/.django
    - ./.envs/.local/.postgres
  ports:
    - "8000:8000"
  command: /start
  networks:
    default:
      ipv4_address: 144.xxx.xxx.3

  node:
    build:
      context: .
      dockerfile: ./compose/production/nodejs/Dockerfile
    image: hegeo_node
    depends_on:
      - postgres
    links:
      - postgres
    ports:
      - "4757:4757"
    networks:
      default:
        ipv4_address: 144.xxx.xxx.66

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: hegeo_production_postgres
    volumes:
      - local_postgres_data:/var/lib/postgresql/data
      - local_postgres_data_backups:/backups
    env_file:
      - ./.envs/.local/.postgres
    networks:
      default:
        ipv4_address: 144.xxx.xxx.4

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
      ipam:
        driver: default
        config:
          - subnet: 144.xxx.xxx.0/24

我认为我必须使用“ docker run”,但两者都不起作用。 Docker - Make docker containers use my public ip

编辑: 关键是,我使用了网络“驱动程序”,因为我从地理位置设备接收到跟踪,并且需要使用Node.js解析此跟踪并将其发送到Django。如果我没有设置网络并为Django分配ipv4_address,则Django和Node.js之间的连接将无法正常工作。

1 个答案:

答案 0 :(得分:1)

您提到打开了端口,并将其从路由器转发到笔记本电脑。 您的docker yaml不需要了解公共IP,因此您应该删除网络设置并进行以下操作:

Internet > (public IP) Router (NAT to Local Docker host machine IP) > Docker host laptop (with firewall off, or port open) > docker engine (port is mapped from host to container)  > your Node.js script listening to on the port.