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

我无法通过公共IP访问Docker Node.js容器,node.js,docker,docker-compose,ip,Node.js,Docker,Docker Compose,Ip,我有一个Docker Node.js容器侦听端口4757和网络库,使用我的公共IP server listening on {"address":"144.xxx.xxx.66","family":"IPv4","port":4757} 当我从我的计算机访问时,我没有问题,但如果我尝试访问我的移动设备或其他设备,连接将被拒绝(ERR_ADDRESS_unaccess) 我已禁用Linux防火墙 如果我对我的公共IP进行ping,它将正常工作 我的路由器中兴通讯(Yoigo)的端口4757打开

我有一个Docker Node.js容器侦听端口4757和网络库,使用我的公共IP

server listening on {"address":"144.xxx.xxx.66","family":"IPv4","port":4757}
当我从我的计算机访问时,我没有问题,但如果我尝试访问我的移动设备或其他设备,连接将被拒绝(ERR_ADDRESS_unaccess)

  • 我已禁用Linux防火墙
  • 如果我对我的公共IP进行ping,它将正常工作
  • 我的路由器中兴通讯(Yoigo)的端口4757打开,局域网主机为192.168.1.128 TCP和UPD
docker composer在其他笔记本电脑上的应用程序工作正常,问题出在我的新笔记本电脑上。这是我的本地电话

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”,但也不能工作。

编辑:
关键是,我使用了一个网络“驱动程序”,因为我从地理定位设备接收跟踪,我需要使用Node.js解析此跟踪并将其发送给Django。如果我没有设置网络并为Django分配ipv4_地址,Django和Node.js之间的连接将不起作用

您提到您已打开端口,并已将其从路由器转发到笔记本电脑。 您的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.

在你的新笔记本电脑中删除这个
ipv4\u地址:144.xxx.xxx.66
。谢谢,它可以工作,但我需要设置ipv4\u地址,我更新了我的帖子解释了它。另一个参考信息是,你不能只分配公共IP,除非你真的从你的ISP购买了它们,并且它们正确地路由到了你的路由器。谢谢,它工作,但我需要这个网络设置,我更新了我的帖子解释它。你可以分配IP,但不是公共IP。尝试一个简单的10.x.x.x范围,端口映射将处理传入的流量,并且您可以使用您设置的专用IP与django通信。