Docker的网络类型和固定IP设置

Docker的网络机制

Docker的网络有三种类型(driver): bridge, host 和 null.

  • birdge: 就如同桥接的switch/hub, 使用bridge网络的container会分配一个当前bridge配置的子网IP, 在通过run创建container时通过 --ip 指定.
  • host: 需要使用 --network=host 参数指定. 使用主机网络, 此时 container 的网络会附属在主机上, 两者是互通的. 例如在container中的服务监听8080端口, 则主机的8080端口就会自动映射到这个端口.
  • none: 需要使用 --network=none 参数指定. 不分配局域网的IP

可以通过命令 docker network ls 和 docker network inspect [name] 查看

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
771ed6aaa9f8        bridge              bridge              local
243e4b881761        host                host                local
1c2c6b04e22c        none                null                local

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
      ...
    }
]

在宿主机上, 通过ifconfig能看到bridge的网关IP, 而container IP是不能直接看到的.

创建自定义Network

启动Docker容器的时候,使用默认的网络是不支持指派固定IP的

docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6
docker: Error response from daemon: User specified IP address is supported on user defined networks only.

需要使用自定义的network, 创建完后, 在宿主机上能看到新的bridge 的网关IP

$ docker network create --subnet=192.168.250.1/24 mybridge
760fb4aec8aef1eacece34d3a28aee1eabde7c47ce8ef9ec646c7c320a4da195

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
771ed6aaa9f8        bridge              bridge              local
243e4b881761        host                host                local
760fb4aec8ae        mybridge            bridge              local
1c2c6b04e22c        none                null                local

使用固定IP创建Container

$ docker run --name eureka -itd --net mybridge --ip 192.168.250.3 scot-eureka:latest /bin/bash
ba7f9fcb4178c5181d3ea85eca5d03a132b8f32727c1ca0ee13bfd1ec15e4cc8

$ ping 192.168.250.3
PING 192.168.250.3 (192.168.250.3) 56(84) bytes of data.
64 bytes from 192.168.250.3: icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from 192.168.250.3: icmp_seq=2 ttl=64 time=0.102 ms

使用固定IP启动官方4.0.11版本的redis (启动latest=5.0.0版本的redis, 无法链接6379端口, 尚未检查具体原因, 4.0.11是没问题的)

$ docker run   -d --name redis2 --net mybridge --ip 192.168.250.2 redis:4.0.11

Docker的 Macvlan 网络

创建macvlan网络, 可以使docker的虚拟网卡直接绑定宿主机的物理网卡, 直接与宿主机所在网络进行通讯. 此时, 除了宿主机和docker容器之间无法通信以外, docker容器与容器之间, 容器与宿主机网段其他机器之间都可以互访.

参考的说明 https://docs.docker.com/v17.09/engine/userguide/networking/get-started-macvlan/ 其中特别提到的, 这是因为安全隔离所造成的, 如果需要宿主机和容器之间通信, 需要增加子网卡.

Communication with the Docker host over macvlan

When using macvlan, you cannot ping or communicate with the default namespace IP address. For example, if you create a container and try to ping the Docker host’s eth0, it will not work. That traffic is explicitly filtered by the kernel modules themselves to offer additional provider isolation and security.

A macvlan subinterface can be added to the Docker host, to allow traffic between the Docker host and containers. The IP address needs to be set on this subinterface and removed from the parent address.

创建macvlan的命令


1

2

3

4

5

6

7

8

# 断开连接

$ docker network disconnect bridge-local redis

# 删除网络

$ docker network rm bridge-local

# 创建网络

$ docker network create -d macvlan --subnet=192.168.252.0/24 --gateway=192.168.252.1 --aux-address="parent_host=192.168.252.151" -o parent=enp2s0f0 bridge-local

# 将运行中的docker连接至bridge-local

$ docker network connect bridge-local redis --ip 192.168.252.10

参考 http://networkstatic.net/configuring-macvlan-ipvlan-linux-networking/

以及如何在Ubuntu18.04下配置subinterface https://askubuntu.com/questions/971126/17-10-netplan-config-with-bridge

原文地址:https://www.cnblogs.com/yipianchuyun/p/10386378.html

时间: 2024-07-30 00:35:02

Docker的网络类型和固定IP设置的相关文章

Docker安装nacos1.0.0 固定ip 单机模式

1 从dockerHub拉取镜像到本地 docker pull nacos/nacos-server:1.0.0 2 创建目录(宿主机) 2.1 日志目录 mkdir -p /docker/nacos/standalone-logs/ 3 创建固定容器ip 3.1 创建自定义网络类型,并且指定网段 docker network create --subnet=172.30.0.1/16 bnet 通过docker network ls 可以查看到网络类型中多了bnet 4 使用新的网络类型创建并

路由器无线网下固定ip设置

在网络连接里面找到连接状态的详细信息.将相应的信息写到ip设置中,勾选退出验证设置,自动重新启动网络适配器,即可. 路由器无线网下固定ip设置,布布扣,bubuko.com

docker单机网络类型

docker单机网络类型概述 Docker 安装时会自动在 host 上创建三种网络  分别为 bridge    host   none .   可用 docker network ls 命令查看 none 网络 none 网络就是什么都没有的网络.挂在这个网络下的容器除了 lo,没有其他任何网卡 一些对安全性要求高并且不需要联网的应用可以使用 none 网络 host 网络        连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样

CentOS DVD ISO 网络配置 以及 静态IP设置

参考地址: https://blog.csdn.net/baidu_32523857/article/details/82880678 CentOS下载地址:  https://www.centos.org/download/ 静态IP设置 进入/etc/sysconfig/network-scripts/目录, 修改文件 修改内容如下 原文地址:https://www.cnblogs.com/eason-d/p/11445761.html

ubuntu 15.10 设置静态ip 分配固定ip 设置dns 设置网关 命令行配置ip 固定ip不生效怎么办

要用到的文件: 配置接口信息 /etc/network/interfaces 配置内容: auto eth0 iface eth0 inet static address 192.168.216.188 gateway 192.168.216.2 netmask 255.255.255.0 配置dns /etc/resolvconf/resolv.conf.d/base 配置内容:nameserver 192.168.216.2 查看dns: /etc/resolv.conf 命令: 查看系统网

linux 桥接模式下 固定ip 设置

DEVICE=eht0   #网卡名称BOOTPROTO=none #关闭自动获取  dhcp  IPADDR=192.168.0.178   #ip地址GATEWAY=192.168.0.1  DNS1=192.168.0.1HWADDR=00:0c:29:0f:95:75NM_CONTROLLED=yesONBOOT=yes  #开机启动TYPE=Ethernet  UUID="6ed41d71-9f0c-4bf8-8ff6-7a728926356d"IPV6INIT=noUSER

VMware workstation 14 CentOs 7.5.1804 虚拟机网卡设置为NAT模式并设置固定IP

一.背景知识     虚拟机网络模式 无论是vmware workstation,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3.Host-Only 桥接 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段. 所以当我们要在局域网使用虚拟机

1 weekend110的Linux带图形系统安装 + 网络配置 + 静态IP设置

一.weekend110的Linux带图形系统安装 二.网络配置 明明是配置好的啊,只能说是域名出现问题了, 出现ping:unknow host www.baidu.com的问题解决 解决Ubuntu系统的每次开机重启后,resolv.conf清空的问题 网络配置和静态IP设置,成功! 参考链接:http://jingyan.baidu.com/article/4d58d54137d2a19dd5e9c050.html Ctrl + Alt + F1,到图形界面            Ctrl

docker 设置固定ip、配置网络

Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge local 1252da701e55 host host local 237ea3d5cfbf none null local 启动 Docker的时候,用 --network 参数,可以指定网络类型 docker run -itd --name test1 --network bridge --i