【问题标题】:Docker: get clients IP address in containerDocker:在容器中获取客户端 IP 地址
【发布时间】:2022-01-08 08:12:10
【问题描述】:

如何在任何 docker 容器中接收客户端 IP 地址?

在我的 php 应用程序中,我需要使用 $_SERVER[REMOTE_ADDR] 检查客户端 IP 地址以控制目前无法访问的访问。

例如,我在 8080 端口的容器中运行 php-apache 网络服务器。

我的IP地址是:192.168.80.177 容器网络:172.21.0.0/16 容器ip':172.21.0.3

当我访问 localhost:8080 时,将记录 docker 网络网关的 ip (172.21.0.1)。

是否可以将我的客户端 IP 地址传递给 docker 容器?

谢谢

【问题讨论】:

  • 刚刚意识到我对主机的回答,但在这种情况下,客户是什么意思?让我知道,以便我更新我的答案。
  • 抱歉我的回复晚了。我想在生产中运行我的容器。所以客户端是我的 Web 应用程序的访问者(在 docker poroduction 中运行)。我需要他的真实 IP 地址,首选 $_SERVER['REMOTE_ADDR']。

标签: docker docker-compose docker-container docker-networking


【解决方案1】:

您可以在 docker 运行时将主机 ip 作为环境变量传递,然后在 php 中使用$_ENV['your_env_name'] 抓取它;

# GET & SET HOST IP
# double check this on the system you're working on.
# should work on most linux env
# Adjust NR=1 or NR=2 NR=3 depending on the ip addresses returned
export HOST_IP=$(echo "$(ifconfig)" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | awk "NR==7{print;exit}");
# PASS HOST IP AS ENV
docker run -it -d -p 8080:8080 -e HOST_IP=$HOST_IP --name yourname docker:image;
// Your php script
echo $_ENV['HOST_IP'];

【讨论】:

  • 这不会处理 IP 更改。
  • @FabienSnauwaert 来自本地,这是正确的,您需要再次重做。
【解决方案2】:

在运行容器时使用--net=host

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 2011-07-22
    • 1970-01-01
    • 2013-07-07
    • 2011-05-26
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多