问题描述
我有一个 tcp 服务器 nodejs,一些客户端可以连接到它并根据 ip 地址进行身份验证,但是 docker 中的 tcp 服务器找不到客户端的有效远程 ip 地址。当连接到服务器时,每个客户端都找到无效的 172.17.0.1 地址远程地址。有没有办法找到真正的远程IP地址?
解决方法
Docker 中的容器在与主机隔离的自己的命名空间中工作,因此它们获得单独的 IP 地址。主机上暴露的端口会被转发到容器,所以在这个过程中你会丢失原始IP。
如果您使用的是 linux 主机,则可以按照 documents 中的说明为容器创建一个 host
网络,以创建与主机网络位于同一命名空间中的容器。
当您使用 --network host
启动容器时,您将位于与主机相同的网络命名空间中,因此不会涉及额外的路由。
示例:
docker run --rm -d --network host <container>
如果您在虚拟机中运行 docker(例如 Mac 的 Docker 或 Windows 的 Docker),那么您需要在容器网络和主机网络之间创建一个桥接器。以下是一些可以提供帮助的网站