Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 到达容器时,数据报IP已更改_Docker_Docker Compose_Docker For Mac - Fatal编程技术网

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

Docker 到达容器时,数据报IP已更改,docker,docker-compose,docker-for-mac,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:

我正在尝试建立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"


一种简单的方法是使用网络模式运行容器
主机

docker运行--网络=主机

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

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

谢谢,我的容器依赖于另一个容器。它应该在主机模式下运行吗?当我尝试时,我在日志中看到一个未知主机异常,rabbitmq服务器主机名无法解析。我在问题上加了我的docker作文。我在mac上以本机方式运行Docker。您可以,但当我使用--net=host时,&localhost:15672无法工作,请在
localhost:5672
上连接到兔子。我认为这是一个Mac限制,它不会让我发布端口:),显然。