最近在用docker swarm的时候,出现获取客户端IP获取全部为.10.20.x.x。
经过排查,原因为:docker swarm 任务默认走 ingress 网络。而获取IP的地方为docker容器之中,故获取到的IP为10.20.x.x。
由于我使用的是docker-compose yml方式,通过docker stack deploy 进行启动部署。
而docker service 提供的Host 方式不太适合。
docker service create -d –name svc1 –publish published=5000,target=80,mode=host nginx
最后在通过ports参数下mode配置host解决了该问题。
image: nginx
ports:
- mode: host
protocol: tcp
published: 8080
target: 8080
- mode: host
protocol: tcp
published: 8070
target: 8070