window安装DockerDesktop无法使用host网络模式解决方案
2023-12-13 19:53:52
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
这里我把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
给容器绑定上域名后,我们就可以在另一个容器中直接通过域名访问这个容器了
2. 使用Docker内置的链接 --link
单向的建立A容器访问B容器
docker run -d -p 80:80 --link node-app:node-app --name nginx-proxy nginx-proxy
3. 使用自定义网桥(推荐)
-
创建网桥
docker network create --driver=bridge --subnet=172.25.0.0/16 mybridge
-
启动容器的同时绑定网桥同时设置固定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
? 启动另一个服务
docker run -d -p 27001:7001 --network=mybridge --ip=172.25.0.2 --name ma-test
base-server
? 使用网桥的好处就是容器之间是共享网络的,双向的,比–link的方式要灵活,而且容器内ip可以指定号,更加可控
文章来源:https://blog.csdn.net/qq_35921773/article/details/134972007
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!