【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
    评论
Docker是一个强大的应用容器化平台,它可以实现将一个应用及其依赖的组件打包成一个可移植的Docker容器,然后在不同的平台上运行该容器Dockerfile是一种用于建立Docker镜像的脚本语言,通过指定各种命令和参数,来构建符合要求的Docker镜像。其中,Expose命令就是Dockerfile中一个用于指定容器开放/映射端口的命令。 在Dockerfile中使用Expose命令可以指定容器需要公开/映射的端口号,具体命令格式如下: Expose <port> 其中,<port>代表需要映射的端口号,可以同指定多个端口,例如Exopse 80 443。 使用Expose命令后,Docker会在容器的元数据中添加一个开放/映射端口的信息,表示该容器需要暴露给外部的应用使用的端口,但实际上这些端口没有直接暴露给外部应用。要使外部应用可以访问Docker容器内部的端口,还需要进一步进行端口映射。在启动Docker容器,可以使用-p或-P参数来将容器内部的端口映射到宿主机上,例如: docker run -p 80:80 -p 443:443 myimage 其中,-p参数后面指定的格式为<host port>:<container port>,可以将容器内部的端口映射到宿主机的指定端口上。如果不指定宿主机的端口号,则Docker会自动分配一个可用的端口号进行映射。 总结来说,Expose命令是用于指定Docker容器需要开放/映射的端口,而映射端口则是在启动Docker容器通过-p或-P参数实现的。这样可以让外部应用访问Docker容器内部的应用程序,从而实现应用程序的可移植性和高度可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值