我正在尝试建立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"
答案 0 :(得分:1)
一种简单的方法是以网络模式host
运行容器:
docker run --network=host <docker_image>
在host mode中,您的容器将使用docker主机网络接口而不是拥有自己的网络接口,因此它将与docker主机共享相同的IP地址。请注意,在这种模式下,容器打开的所有端口都会在docker主机网络接口上打开,即使没有发布端口也是如此。
答案 1 :(得分:0)
将host.docker.internal用作服务器IP从容器到达服务器的解决方法。