Docker:获取容器中客户端的IP地址

4

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

在我的PHP应用程序中,我需要使用$_SERVER [REMOTE_ADDR]检查客户端IP地址以控制访问权限,但目前这是不可能的。

例如,我在端口8080上运行了一个PHP-Apache Web服务器容器。

我的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容器中?

谢谢!


刚刚意识到我的回答是针对主机的,但在这种情况下你所说的客户端是什么意思?让我知道,这样我就可以更新我的回答了。 - codingwithmanny
抱歉回复晚了。我想在生产环境中运行我的容器。因此,客户端是我的 Web 应用程序的访问者(在 Docker 生产环境中运行)。我需要他的真实 IP 地址,最好使用 $_SERVER['REMOTE_ADDR']。 - martin
2个回答

0
你可以在运行docker容器时将主机IP作为环境变量传递,并使用$_ENV['your_env_name']在php中获取它;
# 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地址的更改。 - Fabien Snauwaert
@FabienSnauwaert 从本地来看,你需要重新做一遍。 - codingwithmanny

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

因为存在一个持续了十年的错误,阻止了其他所有操作。https://github.com/moby/moby/issues/15086 - cloudsurfin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接