美文网首页
--network host所有容器和主机互通

--network host所有容器和主机互通

作者: 晓函 | 来源:发表于2022-04-03 21:26 被阅读0次

docker默认每个容器的网络都是独立的,不互通的,和宿主机也是隔离的。
如何互通呢?容器之间可以通过--network 设置相同名称网络,来实现互通,如所有容器都run --network mynet123。
你服务器上安装了mysql,docker里有容器redis,容器nginx还有容器website,和宿主机的mysql怎么互通呢?
为了实现nginx能打开website,website能访问redis和mysql,我们只需要把所有容器的网络都设为和宿主机同处一个网络就行了

使用host

当 docker 容器使用 host 连接方式的时候,容器与宿主共用网络,这样就能从容器中访问宿主网络了
容器中的 localhost 就等于宿主的 localhost 了.
在 docker 命令中使用 --network host 来为容器配置host网络
1、docker run的时候加上--network host

docker run --name  website --network=host
docker run --name nginx --network=host
docker run --name redis --network=host

2、docker-compose中使用
docker-compose.yaml文件:
加上network_mode: host

services:
  website:
    build: . # 指定 Dockerfile 所在路径
    restart: always
    network_mode: host

判断host模式是否生效

host.docker.internal指向主机ip,如果是127.0.0.1就对了

ping host.docker.internal

注意事项

需要注意的是,因为容器是与宿主机共享网络,并且容器不存在自己的ip, 端口映射不生效, -p,–publish,-P,和–publish-all都将被忽略,并产生一个警告
WARNING: Published ports are discarded when using host network mode

严重警告:host模式主机网络驱动程序仅适用于Linux主机,并且不支持Docker for Mac,Docker for Windows或Docker EE for Windows Server。

docker network介绍

如果不使用 --network=host 的话会出现什么问题呢?
curl localhost:3000 的时候会出现 502 Bad Gateway ,这种情况下 nginx.conf 中的 localhost 有问题。 由于 nginx 是运行在 docker 容器中的,这个localhost 是容器的 localhost,而不是宿主机的localhost。
Docker容器运行的时候有host、bridge、none三种网络可供配置,bridge还可以使用指定容器网络和自定义网络名称

–-network=bridge
默认就是 bridge,即桥接网络,以桥接模式连接到宿主机,创建一个独立网络
可以通过自定义bridge将多个容器互通

方式A:–-network=netName
自定义网络
这个模式可以自定义network名称,相同network名称之间的容器可以互通。
与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。
具体步骤查看:https://www.jianshu.com/p/2468ef97ce1e

方式B:–-network=container:Name/ID
可以和指定容器之间互通。
与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。

–-network=host
与宿主机共享网络,也就是在网络这块不会与宿主机隔离,而是共享宿主机的网络配置,并且 容器不会分配自己的ip地址
由于不需要端口映射,host网络的性能较高.

–-network=none
无网络,容器将无法联网。

–-network=overlay
用于swarm集群中容器的跨主机网络访问

相关文章

  • --network host所有容器和主机互通

    docker默认每个容器的网络都是独立的,不互通的,和宿主机也是隔离的。如何互通呢?容器之间可以通过--netwo...

  • Docker网络学习第五篇-基础网络模式

    标准的Docker支持4类网络模式 host模式:容器和宿主机共享Network namespace。 conta...

  • Docker macvlan host to container

    使用通常的方式创建macvlan,容器关联macvlan网络,网内其他主机都可以互通访问,但唯独host和cont...

  • Docker 网络的四种模式

    host模式 和宿主机共用一个Network Namespace,容器将不会虚拟出自己的网卡,配置自己的IP等,而...

  • docker redis

    安装运行 我们把redis的network=mynet,方便所有容器互通,如何创建network详情看:https...

  • docker mysql5.7

    安装运行 我们把mysql的network=mynet,方便所有容器互通,如何创建network详情看:https...

  • Mac 上容器访问宿主机

    有时候为了调试需要从容器内部访问宿主机,首先想到 network_mode 为 host,但 Mac 上这个参数是...

  • docker 网络-host

    Host 模式介绍: 1、容器与主机在相同的网络命名空间下面,使用相同的网络协议栈,容器可以直接使用主机的所有网络...

  • Docker 安装 zookeeper

    一、安装单机版 拉取镜像 创建挂载目录 创建配置文件 4.单机主机启动容器 命令说明:--network host...

  • 三十九、Docker网络-host网络详解

    host简介 容器与宿主机共享同一网络,从下面的例子可以发现,容器box1和宿主机使用的网络完全一致 host网络...

网友评论

      本文标题:--network host所有容器和主机互通

      本文链接:https://www.haomeiwen.com/subject/uqhqsrtx.html