在Docker Swarm中通过Stack Deploy部署Service的时候,在Service中默认无法获取到客户端的IP地址, Github中有一个issue在track这个问题:Unable to retrieve user’s IP address in docker swarm mode
目前的解决方法或Workaround是把port改成host模式, 以kong为例.
默认的port发布模式:
version: "3.7"
services:
kong-proxy:
image: kong:1.0.3-alpine
deploy:
mode: global
labels:
- "tier=frontend"
restart_policy:
condition: any
ports:
- "80:8000"
- "443:8443"
depends_on:
- database-postgresql
environment:
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
KONG_DATABASE: postgres
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: PaSsW0rd
KONG_PG_HOST: database-postgresql
KONG_PG_PORT: "5432"
volumes:
- type: "bind"
source: "/var/log/kong/"
target: "/usr/local/kong/logs/"
# read_only: true
networks:
- backend
- frontend
networks:
frontend:
backend:
修改port为host模式:
version: "3.7" services: kong-proxy: image: kong:1.0.3-alpine deploy: mode: global labels: - "tier=frontend" restart_policy: condition: any ports: - target: 8000 published: 80 mode: host - target: 8443 published: 43 mode: host depends_on: - database-postgresql environment: KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl KONG_DATABASE: postgres KONG_PG_DATABASE: kong KONG_PG_USER: kong KONG_PG_PASSWORD: PaSsW0rd KONG_PG_HOST: database-postgresql KONG_PG_PORT: "5432" volumes: - type: "bind" source: "/var/log/kong/" target: "/usr/local/kong/logs/" # read_only: true networks: - backend - frontend networks: frontend: backend: