• docker部署springboot程序时遇到的network问题


    对应问题,因为刚开始接触docker,所以问题可能比较简单,但是做个记录
    1、启动一个springboot项目获取本地ip的时候获取到的是172.17.0.x这个ip;在使用一些注册中心,mq的时候又要表明自己的本机器ip的时候会比较头疼;
    2、机器上有两个docker容器,需要进行通信,比如什么grpc。。。
    对于上述两个小问题,可以通过绑定docker的network来进行解决
    解决的方式:
    1、两个容器如果都使用host模式,最简单粗暴 共用主机的网络;(ip获取错误和容器间的通信都可以解决)
    怎么看是什么模式的,
    通过docker inspect 容器id 查看一个NetworkID的key ,
    然后docker network ls 看这个NetworkID 的DRIVER是什么类型;
    docker run -d --name xx --network host xx

    2、如果需要进行通信的目标容器是自定义的network,那么就需要指定这个network为需要进行通信的容器的network模式(可以解决容器间通信的问题,但是能否解决获取ip的问题,就需要看目标容器的network类型了,host是可以的,对于bridge桥接则不行,或者说桥接需要配置一下ip信息)
    怎么看这个容器用的是那个network
    通过docker inspect 容器id 查看一个NetworkID的key ,
    然后docker network ls 看这个NetworkID 的name是什么;
    启动的时候绑定就可以
    docker run -d --name xx --network xx(network的name) xx

    查看某个network关联了哪些容器:docker network inspect xx(network的name)

    一、docker network介绍

    我们先来看看docker network官网对它的解释:https://docs.docker.com/network/drivers/
    官网文中描述到:
    容器网络是指容器相互连接和通信的能力,或者与非docker工作负载进行通信的能力
    容器没有关于它所连接的网络类型的信息,或者它们的对等节点是否也是Docker工作负载。容器只能看到一个带有IP地址、网关、路由表、DNS服务和其他网络详细信息的网络接口。也就是说,除非容器使用无网络驱动程序。
    文中从容器的角度描述了网络,以及有关容器网络的概念。文中没有描述Docker网络如何工作的特定于操作系统的细节。有关Docker如何在Linux上操作iptables规则的信息,请参见包过滤和防火墙。

    二、端口的映射

    默认情况下,当使用docker create或docker run创建或运行容器时,容器不会向外部世界公开其任何端口。使用——publish或-p标志使端口对Docker以外的服务可用。这会在主机中创建一个防火墙规则,将容器端口映射到Docker主机上指向外部世界的端口。

    如:docker run -d --name xx -p 80:80 xx
    -p 8080:80将容器中的TCP端口80映射到Docker主机上的8080端口。
    -p 192.168.1.100:8080:80将容器内的TCP端口80映射到Docker主机上的8080端口,用于连接IP 192.168.1.100的主机。
    -p 8080:80/ UDP将容器内的UDP端口80映射到Docker主机上的8080端口。
    -p 8080:80/tcp -p 8080:80/ UDP将容器的tcp 80端口映射到Docker主机的tcp 8080端口,将容器的UDP 80端口映射到Docker主机的UDP 8080端口。

    如果您希望使一个容器可以被其他容器访问,则不需要发布容器的端口。通过将容器连接到相同的网络(通常是桥接网络),可以实现容器间通信

    三、docker的ip和端口

    默认情况下,容器会为它连接的每个Docker网络获取一个IP地址。容器从网络的IP子网中接收IP地址。Docker守护进程为容器执行动态子网划分和IP地址分配。每个网络也有一个默认的子网掩码和网关。
    还有一些细节可以参考官网进行多样化的配置;

    四、DNS services

    有兴趣可以去关注一下;

    五、Network drivers docker的网络驱动(本次介绍重点 )

    Docker的网络子系统是可插拔的,使用驱动程序。默认存在几个驱动程序,并提供核心网络功能:

    • bridge:默认的网络驱动程序。如果您没有指定驱动程序,这就是您正在创建的网络类型。当应用程序在需要与同一主机上的其他容器通信的容器中运行时,通常使用桥接网络。参见网桥网络驱动程序。
      默认桥接网络非常适合运行不需要特殊网络功能的容器。

    • host:取消容器和Docker主机之间的网络隔离,直接使用主机的网络。请参见主机网络驱动程序。
      主机网络与容器共享主机的网络。当您使用这个驱动程序时,容器的网络不会与主机隔离

    • overlay: overlay网络将多个Docker守护进程连接在一起,使Swarm服务和容器能够跨节点通信。这种策略不需要做操作系统级别的路由。参见覆盖网络驱动程序。
      当你需要在不同的Docker主机上运行的容器进行通信,或者当多个应用程序使用Swarm服务一起工作时,覆盖网络是最好的。

    • ipvlan: ipvlan网络允许用户完全控制IPv4和IPv6寻址。VLAN驱动程序建立在此基础之上,为对底层网络集成感兴趣的用户提供了对第2层VLAN标记甚至IPvlan L3路由的完全控制。参见IPvlan网络驱动程序。
      IPvlan类似于Macvlan,但不为容器分配唯一的MAC地址。当可以分配给网络接口或端口的MAC地址数量受到限制时,请考虑使用IPvlan。

    • macvlan: macvlan网络允许您为容器分配MAC地址,使其在网络上显示为物理设备。Docker守护进程根据容器的MAC地址将流量路由到容器。当处理期望直接连接到物理网络而不是通过Docker主机的网络堆栈路由的遗留应用程序时,使用macvlan驱动程序有时是最佳选择。参见Macvlan网络驱动程序。
      当您从虚拟机设置迁移或需要容器看起来像网络上的物理主机,每个容器都有唯一的MAC地址时,Macvlan网络是最好的

    • none:将容器与主机和其他容器完全隔离。对于Swarm服务,none是不可用的。请参见无网络驱动程序。

    bridge

    官方提到:Remember, the default bridge network is not recommended for production.
    不建议将默认桥接网络用于生产环境
    在用户定义网络上,容器不仅可以通过IP地址进行通信,还可以将容器名称解析为IP地址被称为:automatic service discovery自动服务发现

    host

    官网以部署nginx为例子
    本教程的目标是启动一个nginx容器,它直接绑定到Docker主机上的80端口。从网络的角度来看,这与nginx进程直接在Docker主机上运行而不是在容器中运行是相同的隔离级别。但是,在所有其他方面,如存储、进程名称空间和用户名称空间,nginx进程与主机是隔离的。
    **The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.**不支持linux之外的形式绑定;
    linux通过该形式绑定:
    docker run -d --network host --name my_nginx nginx

    因为该进程由Docker守护进程用户拥有,所以需要高级权限查看
    sudo netstat -tulpn | grep :80 或者 curl -v 127.0.0.1:port

    至于其他的自定义/container模式尚未在官网寻找到。。。后续补充

  • 相关阅读:
    实验二.面向对象基础
    图像分割 人脸分割CVPR2023笔记
    算符与数据结构 --- 类C语言有关操作和补充
    FL Studio21傻瓜式编曲音乐编辑器FL水果软件
    学习pytorch7 神经网络的基本骨架--nn,module的使用
    搜维尔科技:Touch触觉式力反馈设备与Touch X力反馈设备对比分析
    C++编程语言的深度解析: 从零开始的学习路线
    【JavaEE】初识操作系统,吃透进程
    一文带你摸清设计模式之单例模式!
    安装visual studio报错“无法安装msodbcsql“
  • 原文地址:https://blog.csdn.net/an_gentle_killer/article/details/133014707