0


Docker服务无法被访问

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

测试

安装nginx

docker pull nginx
docker images

运行nginx

docker run -p8080: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 -p8090:80 --net=host ...
标签: docker 容器

本文转载自: https://blog.csdn.net/Walk__Alone/article/details/133700070
版权归原作者 MiracleStep 所有, 如有侵权,请联系我们删除。

“Docker服务无法被访问”的评论:

还没有评论