Я не могу получить доступ по общему IP к моему контейнеру Docker Node.js - PullRequest
0 голосов
/ 04 октября 2019

У меня есть порт прослушивания контейнера Docker Node.js 4757 с библиотекой NET, использующий мой публичный IP.

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

Когда я получаю доступ с моего компьютера, у меня нет проблем, но если я пытаюсь получить доступ к своему мобильному или другому устройству, соединение отклоняется (ERR_ADDRESS_UNREACHABLE).

  • У меня отключен брандмауэр Linux.
  • Если я пингую свой публичный IP-адрес, он работает правильно.
  • В моем маршрутизаторе ZTE (Yoigo) с LAN Host 192.168.1.128 TCP и UPD

Приложение работало корректно с помощью 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 - заставить Docker-контейнеры использовать мой общедоступный ip

EDIT: Дело в том, что я использовал сетевой «Драйвер», потому что я получаю трассировки от устройства геолокации и мне нужно анализировать эту трассировку с Node.js и отправь его Джанго. Если я не установил сеть и назначил ipv4_address для Django, соединение между Django и Node.js не работает.

1 Ответ

1 голос
/ 04 октября 2019

Вы упомянули, что у вас открыт порт и переадресован с вашего роутера на ваш ноутбук. вашему докеру 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.
...