Docker服务无法被访问

文章讲述了在Docker部署服务时遇到的问题,重点在于宿主机无法访问容器。作者通过排查网络模式、端口映射、防火墙等因素,发现是网络模式设置导致的,并提供了切换到host模式和重启Docker等解决方案。

最近在准备做项目时,在Docker部署服务时出现了问题。使用Docker部署的服务,宿主机无法进行访问。
这方面的原因有很多,需要进行逐一排查。

测试

安装nginx

docker pull nginx
docker images

运行nginx

docker run -p 8080:80 --name=nginx_tmp -d nginx

宿主机进行通过浏览器访问localhost:8080,如果访问成功说明docker网络环境没问题,很大概率是容器和镜像的配置问题。

基础问题

确保宿主机网络可以正常使用、是否进行端口映射等等。这类通常都是简单的问题,通常是忘记设置等原因,但我当前的原因却不是。

进阶问题

这方面的原因主要涉及到Docker网络问题。Docker共有四种网络模式:host、bride(桥接模式,默认模式)、container、none。其中host、bridge是我们常用的模式。当docker run --net=host ...(这个命令让容器与宿主机共享网络命名空间,这样容器就可以直接使用宿主机的IP地址进行访问),指定网络模式后才会进行更改,默认则采用桥接模式,ip地址通常为:172.17.0.2、172.17.0.3、172.17.0.4等等。可以通过docker inspect 容器名称查看对应的ip地址。
docker容器具体的网络配置见6 张图详解 Docker 容器网络配置
我的首先检查网络模式为桥接模式在这里插入图片描述
通过宿主机IP地址+端口进行访问,无效。使用ip地址172.17.0.1+端口访问,无效。改用host网络模式重新部署,通过宿主机IP地址+端口进行访问,成功。
下面是一些解决方案,我是通过重启docker进行解决的(估计出现了bug)。

重启docker

systemctl restart docker

众所周知:重启解决99.99的问题。

关闭防火墙

如果你使用虚拟机作为docker的宿主机,可能因为防火墙的问题,导致虚拟机上的docker无法被访问到。那么直接关闭防火墙进行访问试试。

systemctl stop ufw

更改为host网络模式访问

  1. 查看IP地址
docker inspect 容器名 | grep "IPAddress"
  1. 更改网络模式为host模式
docker network disconnect bridge 容器名
docker network connect host 容器名 
  1. 重新启动容器
docker start 容器名

或者重新创建并运行一个容器,添加–net=host选项

docker start -p 8090:80 --net=host ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值