美文网首页
--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所有容器和主机互通

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