关于 Docker 容器获取真实 IP

查看 36|回复 3
作者:ztfot   
使用portainer的stack部署容器的时候应该如何返回真实 IP ?
version: '3'
services:
  webdav:
    image: ghcr.io/hacdias/webdav
    container_name: webdav
    restart: always
    ports:
      - "10001:6065"
    volumes:
      - /storage/docker_data/webdav/config.yml:/config.yml:ro
      - /storage/docker_data/webdav/data:/data
    command: -c /config.yml
  • 使用 stack docker compose 部署容器的时候,docker 会自动生成一个以 stack 命名的网桥, 比如这个 stack 名叫 webdav
  • 比如刚刚生成的容器就自己创建了一个自己的网桥,容器的 IP 地址是 172.19.0.2,网关是 172.19.0.1

    Bridge:
    [td]Name[/td]
    [td]Stack LT[/td]
    [td]Driver[/td]
    [td]Attachable[/td]
    [td]IPAM Driver[/td]
    [td]IPV4 IPAM Subnet[/td]
    [td]IPV4 IPAM Gateway[/td]
    webdav_default
    webdav
    bridge
    false
    default
    172.19.0.0/16
    172.19.0.1
    location / {
      proxy_pass http://127.0.0.1:10001;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_redirect off;
    }

  • 用 nginx 进行反向代理的时候,我进入容器的后台发现2024-10-18T03:01:09.536Z        INFO        login attempt        {"username": "aaaa", "remote_address": "172.19.0.1:57548"}
    2024-10-18T03:01:09.536Z        INFO        user authorized        {"username": "aaaa"}
    2024-10-18T03:02:13.219Z        INFO        login attempt        {"username": "aaaa", "remote_address": "172.19.0.1:56084"}
  • 容器只能检测到它网关的信息,有老哥知道如何解决? 无法获得真正的 IP 地址
  • 不仅仅是 webdav 其他的容器都是这样, 类似的还有 bitwarden 等等。。

  • asuraa   
    network_mode: "host"
    yuanxing008   
    你需要的是 网关+ 服务发现 + 注册中心 + 应用服务注册
    Curtion   
    我的 nginx 这样是可以获取到真是 ip 的
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Referer $http_referer; #header_referer end
    proxy_set_header Host $host; #header_host end
    当然还需要容器本身支持这些 header 才行,有些容器还需要额外配置,例如 traefik 需要加 trustedIPs 配置才行。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部