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

本文主要是介绍window安装DockerDesktop无法使用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

这里我把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. 使用自定义网桥(推荐)

  1. 创建网桥

    docker network create --driver=bridge --subnet=172.25.0.0/16 mybridge
    
  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
    

​ 启动另一个服务

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

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

这篇关于window安装DockerDesktop无法使用host网络模式解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491790

相关文章

pandas DataFrame keys的使用小结

《pandasDataFramekeys的使用小结》pandas.DataFrame.keys()方法返回DataFrame的列名,类似于字典的键,本文主要介绍了pandasDataFrameke... 目录Pandas2.2 DataFrameIndexing, iterationpandas.DataF

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案