首页 > 编程知识 正文

docker固定容器ip(docker内部访问宿主机)

时间:2023-05-03 09:58:27 阅读:81318 作者:3883

参考连接: https://www.cn博客.com/Brock 0624/p/9788710.html

Docker正式建议通过端口映射方式将Docker容器的服务提供给瘦主机或局域网的其他容器使用。 一般过程如下。

1、Docker进程通过拦截宿主机的某个端口,将该端口的数据包发送到Docker容器

2、宿主机可以打开防火墙,让局域网的其他设备通过访问宿主机的端口来访问docker的端口

今天在本地计算机上构建了redis docker环境用于测试。 docker inspect服务名称

redis的docker镜像地址如下所示。

但是,如果直接在windows主机上输入ping地址: 172.17.0.3,您会发现无法进行ping。

为什么呢? 因为,docker会在我们的主机上安装虚拟网卡。 可以通过在主机上运行ipconfig命令来确认该地址。

这个地址是在我们的docker网络设定中设定的,可以修改。 具体而言:

也就是说,docker可以根据我们的网络设置,动态生成虚拟网卡,docker服务器可以通过这个虚拟网卡与外部网络进行通信。 但是,当前的虚拟网卡和主机不在同一个网段上,所以无法ping。 解决方案可通过向主机添加路由策略来解决(需要管理员权限),如上所述。

具体命令如下。

路由填充172.17.0.0掩码255.255.255.010.0.75.2其中,-p是指添加持久路由,并随tcpIp初始化自动生成

add表示要添加路由策略。 因此,delete意味着删除

以参数1 172.17.0.0表示的docker容器内部的网络表示所需的网络

参数2: 255.255.255.0表示目标网络的子网掩码,与docker的设置相同

参数3:10.0.75.2表示网关地址

安装后,再次ping docker内部网的地址,发现可以正常ping。 这样就解决了问题。

运行route print命令时,您会看到已添加了永久路由,新添加的路由也开始工作。 如下所示。

后记:这里有个问题。 10.0.75.1才是网关,10.0.75.1也在主动路由中。 为什么不用呢? 另外,使用route -p add命令将网关地址设定为10.0.75.1也不行吗?

因为如果此时将网关设置为10.0.75.1,则路由表将为:

172.17.0.1已经被占用为网关的入口地址,因此在活动路由表中,网关这一项仍显示为“在链路上”,并在“计算机访问网络的链路上有多个也就是说,还不通。 那么,为什么设定为172.17.0.4以上也不行呢? 由于docker内部有安全策略限制,或者只有1-3个动态分配的ip,因此只能将路由设置为172.17.0.2。

在此记录route print各字段的具体含义。

目标网络段

掩码子网掩码

网关下一跳路由器入口的ip。 路由器通过接口和网关定义到下一个路由器的链路。 通常,接口和网关是同一网段的

接口到达此目的地的本路由器的出口ip

在metric跳数、其根记录的质量、一般来说到达相同目的地的根记录有多个的情况下,路由器使用metric值小的根

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。