当前位置:   article > 正文

window安装DockerDesktop无法使用host网络模式解决方案_docker注册服务为什么不认host

docker注册服务为什么不认host

window安装DockerDesktop无法使用host网络模式解决方案

1. 现象

最近用windows安装DockerDeskTop发现使用windows版的docker启动nginx的时候无法使用host模式,启动fastdfs镜像(本质上来说是nginx)时,指定host网络是,无法访问到nginx页面。查阅资料后发现windows安装的docker不支持host共享宿主机网络的这种方式。因此要想做到容器与容器之间互相访问共享网络固定ip的话就要采用别的方式。

docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=172.0.0.1 -e WEB_PORT=80 -v D:/docker/Data:/var/local/fdfs -v D:/docker/Html:/usr/local/nginx/html registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
  • 1

这里我把IP改成自己的宿主机ip,本意上想使用host模式使容器公用宿主机的所有端口,这样可以fastdfs就能完美运行了,但是在windows中这样启动后,容器反而无法访问,windows根本没有开启80端口。linux使用此命令可以正常启动。经过反复实验,终于找到了解决方案,且看下文。

2. Docker网络模式

这里我们先简单了解下Docker共有四种网络模式

1、host模式,使用“–net=host”指定;

2、container模式,用“–net=container:NAME_or_ID”指定;

3、none模式,用“–net=none”指定;

4、bridge模式

3. 解决方案

为什么要使用-host模式呢,无非就是docker对于每个容器都有自己的生成的一份ip,而容器与容器之间是默认网络隔离的,我们想要容器之间直接能访问除了使用-host指定共享宿主机网络外,还有三个方法可以实现这种效果。

1. 给容器打上域名

docker run --name testcontainer --hostname myhostname testimage
  • 1

给容器绑定上域名后,我们就可以在另一个容器中直接通过域名访问这个容器了

2. 使用Docker内置的链接 --link

单向的建立A容器访问B容器

docker run -d -p 80:80 --link node-app:node-app --name nginx-proxy nginx-proxy
  • 1

3. 使用自定义网桥(推荐)

  1. 创建网桥

    docker network create --driver=bridge --subnet=172.25.0.0/16 mybridge
    
    • 1
  2. 启动容器的同时绑定网桥同时设置固定ip

    docker run -d --restart=always --network mybridge --ip=172.25.0.4 --privileged=true --name=fastdfs -e IP=172.25.0.4 -e WEB_PORT=80 -p 80:80 -p 22122:22122 -v D:/docker/Data:/var/local/fdfs -v D:/docker/Html:/usr/local/nginx/html registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
    
    • 1

​ 启动另一个服务

docker run -d -p 27001:7001 --network=mybridge --ip=172.25.0.2 --name ma-test
base-server
  • 1
  • 2

​ 使用网桥的好处就是容器之间是共享网络的,双向的,比–link的方式要灵活,而且容器内ip可以指定号,更加可控

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/407700?site
推荐阅读
相关标签
  

闽ICP备14008679号