IP датаграммы изменяется при достижении контейнера - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь установить связь UDP, мой сервер работает на хост-компьютере, а клиент работает в контейнере.Я отправляю начальную широковещательную рассылку с IP-адреса сервера.

Но Docker изменяет IP-адрес моего пакета дейтаграммы на свой адрес шлюза с IP-адреса хоста, и поэтому мое Java-приложение, работающее внутри контейнера, не может отправлять UDP-пакеты хосту.

Есть ли способ сохранить IP-адрес хоста в дейтаграмме?

version: '2.3'

services:
  cs:
    image: connectivity:latest
    hostname: cs
    restart: always
    ports:
      # external:internal
      - "8088:9980"
      - "24005:24005/udp"
    volumes:
      - ../../../target:/home
    depends_on:
      - rabbitmq-server
    network_mode: host
    networks:
      hnet:
        aliases:
         - cs
    cap_add:
      - ALL
    environment:
      SERVER_PORT: "9980"
      SPRING_RABBITMQ_HOST: "rabbitmq-server"
      DCX_CS_RABBITMQ_PORT: "5672"
      SPRING_PROFILES_ACTIVE: "local,integration"

  rabbitmq-server:
    image: rabbitmq:3.6-management-alpine
    hostname: rabbitmq-server
    restart: always
    networks:
    network_mode: host
      hnet:
        aliases:
         - rabbitmq-server
    ports:
      # external:internal
      - "5680:5672"
      - "15680:15672"
      - "32780:32768"

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Один простой способ - запустить контейнер в сетевом режиме host:

docker run --network=host <docker_image> 

В режиме хоста ваш контейнер будет использовать сетевой интерфейс хоста докера вместо того, чтобы иметь собственный, и поэтому будет использовать тот же IP-адрес, что и хост докера. Имейте в виду, что в этом режиме любой порт, открытый вашим контейнером, открывается на сетевом интерфейсе узла докера, и это даже без публикации портов.

0 голосов
/ 18 марта 2019

использовал host.docker.internal в качестве обходного пути для IP-адреса сервера для достижения сервера из контейнера.

...