Posted on 2020-01-17 13:26
魔のkyo 阅读(9426)
评论(0) 编辑 收藏 引用
先说结论,宿主机的IP地址就是容器的网关,后面所有操作都是围绕此展开
首先登陆容器的bash
docker exec -it <容器名或容器ID> bash
# 安装ip route命令
# 安装ping命令
使用
命令查看网关,可以看到类似
default via 172.17.0.1 dev eth0
第3个输出部分就是网关IP
所以我们可以通过命令
ip route|awk '/default/ { print $3}'
得到网关IP输出
可以使用命令
ip route|awk '/default/ { print $3,"\tdockerhost" }' >> /etc/hosts
把宿主机IP映射成dockerhost,写入hosts文件
可以查看写入后的hosts文件
可以ping 宿主机或者访问其开放服务端口来测试
最后说一下,如何在通过镜像启动容器时完成映射
就是使用这样的参数
--add-host=dockerhost:`docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge`
完整的命令样例
docker run --add-host=dockerhost:`docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge`\
-p 33066:3306 --name mysql_test \
-e MYSQL_ROOT_PASSWORD=123456 \
上面参数也是把网关加到hosts里的意思,而且它不依赖ip route命令是否可用。