到达容器时数据报IP已更改

时间:2019-03-16 20:57:17

标签: docker docker-compose docker-for-mac

我正在尝试建立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 个答案:

答案 0 :(得分:1)

一种简单的方法是以网络模式host运行容器:

docker run --network=host <docker_image> 

host mode中,您的容器将使用docker主机网络接口而不是拥有自己的网络接口,因此它将与docker主机共享相同的IP地址。请注意,在这种模式下,容器打开的所有端口都会在docker主机网络接口上打开,即使没有发布端口也是如此。

答案 1 :(得分:0)

将host.docker.internal用作服务器IP从容器到达服务器的解决方法。