【docker】dockerfile expose对于端口映射以及微服务注册的影响

dockerfile expose对于端口映射以及微服务注册的影响

前提

Dockerfile:

expose:9096

docker run 无-p端口映射

在不设置expose时,服务注册到nacos后,依旧可以通过微服务请求方式调通,只是ip注册地址为docker内部ip地址,无法在容器外服务器 访问通过,curl直接拒绝连接

在这里插入图片描述

而在设置expose参数后,

(https://img-blog.csdnimg.cn/cd3b40ac93a143ab97c41c5949851b86.png)

curl能够访问通过,且nacos 服务注册地址为内网地址,而非容器内ip地址

疑问:为什么会造成这样情况?

在无expose配置与-p -P命令时,进入到容器内,查看Hosts配置,发现有如下配置

在这里插入图片描述

ifconfig查看容器内Ip后

在这里插入图片描述

docker inspect—查看docker 容器、镜像或网络的详细信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-moQRQub2-1689759218018)(https://secure2.wostatic.cn/static/hz7GigXYykGWifWZneTjZw/image.png?auth_key=1689738644-fejmHxG1DgDqR4Bfgi5uZQ-0-d58a426d0e8a26aeda4aa39ddcf6e0b1)]

docker 能够正常外部访问的shell 脚本

docker run --name datasec -d --restart=always -e NACOS_DISCOVERY_ADDR=192.168.8.53:8848 -e NACOS_CONFIG_ADDR=192.168.8.53:8848 192.168.8.188/navigator/navigator-datasec:bootstrap  

该脚本创建镜像后,注册地址依旧为容器私有ip,但通过外网访问该容器所在服务器ip+port能够访问通过服务

docker run --name datasec -d --network=host --restart=always -e NACOS_DISCOVERY_ADDR=192.168.8.53:8848 -e NACOS_CONFIG_ADDR=192.168.8.53:8848 192.168.8.188/navigator/navigator-datasec:bootstrap  

–network=host 含义是将容器加入到主机网络中

私有ip依旧存在,但是在docker inspect中不再展示,可进入容器内后通过ifconfig来查看

总结:

docker容器的ip地址是在Dokcer内部网络中分类的私有ip地址,并不会直接映射到宿主机的IP地址上。在默认情况下,docker会为每个容器创建Bridge的虚拟网络,并在该网络为容器分配一个Ip地址,默认是以172.17.0.X的形式分配

之所以在没有声明expose与-p也能实现注册的原因是 容器与nacos注册地址在一台服务器,通过私有ip也能进行访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值