Docker四种网络配置及Docker常用操作

=======================================================================

bridge网络配置


[root@localhost ~]# docker run -it --name t1 --rm busybox

Unable to find image ‘busybox:latest’ locally

latest: Pulling from library/busybox

3aab638df1a9: Pull complete

Digest: sha256:52817dece4cfe26f581c834d27a8e1bcc82194f914afe6d50afad5a101234ef1

Status: Downloaded newer image for busybox:latest

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02

inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:12 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1032 (1.0 KiB) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

/ # exit

[root@localhost ~]# docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

//在创建容器时添加–network bridge与不加–network选项效果是一致的

[root@localhost ~]# docker run -it --name t1 --network bridge --rm busybox

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02

inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:9 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:766 (766.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

/ # exit

none模式配置


[root@localhost ~]# docker run -it --name t1 --network none --rm busybox

/ # ifconfig -a

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

container模式配置


//启动第一个容器

[root@localhost ~]# docker run -it --name b1 --rm busybox

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02

inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:8 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:696 (696.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

//启动第二容器

[root@localhost ~]# docker run -it --name b2 --rm busybox

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03

inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:7 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:586 (586.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

//可以看到名为b2的容器IP地址是172.17.0.3,与第一个容器的IP地址不是一样的,也就是说并没有共享网络,此时如果我们将第二个容器的启动方式改变一下,就可以使名为b2的容器IP与b1容器IP一致,也即共享IP,但不共享文件系统

[root@localhost ~]# docker run -it --name b2 --rm --network container:b1 busybox

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02

inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:9 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:726 (726.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

#现在ip地址一致了

//此时我们在b1容器上创建一个目录

/ # mkdir /tmp/data

/ # ls /tmp/

data

//到b2容器上检查/tmp目录会发现并没有这个目录,因为文件系统是处于隔离状态,仅仅是共享了网络而已。在b2容器上部署一个站点

/ # echo ‘hello world’ > /tmp/index.html

/ # ls /tmp/

index.html

/ # httpd -h /tmp/

/ # netstat -anlt

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 :::80 ::😗 LISTEN

//在b1容器上用本地地址去访问此站点

/ # wget -O - -q 127.0.0.2:80

hello world

/ # wget -O - -q 172.17.0.2:80

hello world

#由此可见,container模式下的容器间关系就相当于一台主机上的两个不同进程

host模式配置


//启动容器时直接指明模式为host

[root@localhost ~]# docker run -it --name b2 --rm --network host busybox

/ # ifconfig

docker0 Link encap:Ethernet HWaddr 02:42:67:18:F5:27

inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0

inet6 addr: fe80::42:67ff:fe18:f527/64 Scope:Link

UP BROADCAST MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:9 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:806 (806.0 B)

ens160 Link encap:Ethernet HWaddr 00:0C:29:20:9B:DA

inet addr:192.168.129.250 Bcast:192.168.129.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe20:9bda/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:167284 errors:0 dropped:0 overruns:0 frame:0

TX packets:261508 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:27037611 (25.7 MiB) TX bytes:54031408 (51.5 MiB)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

//此时如果我们在这个容器中启动一个http站点,就可以直接用宿主机的IP在浏览器中访问这个容器中的站点了

/ # echo ‘hello world’ > /tmp/index.html

/ # httpd -h /tmp/

/ # netstat -anlt

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 192.168.129.250:22 192.168.129.1:63130 ESTABLISHED

tcp 0 0 192.168.129.250:22 192.168.129.1:63129 ESTABLISHED

tcp 0 0 192.168.129.250:22 192.168.129.1:59220 ESTABLISHED

tcp 0 0 192.168.129.250:22 192.168.129.1:59219 ESTABLISHED

tcp 0 0 :::80 ::😗 LISTEN

tcp 0 0 :::22 ::😗 LISTEN

如若访问不到,说明防火墙没关闭

在这里插入图片描述

容器的常用操作

======================================================================

查看容器的主机名


[root@localhost ~]# docker run -it --name t1 --network bridge --rm busybox

/ # hostname

a20e1afdcfa9

在容器启动时注入主机名


[root@localhost ~]# docker run -it --name t1 --network bridge --hostname hhrp1 --rm busybox

/ # hostname

hhrp1

/ # cat /etc/hosts

127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.17.0.2 hhrp1 #注入主机名时会自动创建主机名到IP的映射关系

/ # cat /etc/resolv.conf

Generated by NetworkManager

nameserver 192.168.129.2 # DNS也会自动配置为宿主机的DNS

手动指定容器要使用的DNS


[root@localhost ~]# docker run -it --name t1 --network bridge --hostname hhrp1 --dns 114.114.114.114 --rm busybox

/ # cat /etc/resolv.conf

nameserver 114.114.114.114

手动往/etc/hosts文件中注入主机名到IP地址的映射


[root@localhost ~]# docker run -it --name t1 --network bridge --hostname hhrp1 --add-host www.a.com:1.1.1.1 --rm busybox #每个add后面都只能写一个网址

/ # cat /etc/hosts

127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

1.1.1.1 www.a.com

172.17.0.2 hhrp1

开放容器端口


执行docker run的时候有个-p选项,可以将容器中的应用端口映射到宿主机中,从而实现让外部主机可以通过访问宿主机的某端口来访问容器内应用的目的。

-p选项能够使用多次,其所能够暴露的端口必须是容器确实在监听的端口。

-P :是容器内部端口随机映射到主机的高端口。

-p : 是容器内部端口绑定到指定的主机端口。

-p选项的使用格式:

  • -p

  • 将指定的容器端口映射至主机所有地址的一个动态端口

  • -P

  • 是容器内部端口随机映射一个 49000~49900 的端口到内部容器开放的网络端口

  • -p :

  • 将容器端口映射至指定的主机端口

  • -p :

  • 将指定的容器端口映射至主机指定的动态端口

  • -p ::

  • 将指定的容器端口映射至主机指定的端口

动态端口指的是随机端口,具体的映射结果可使用docker port命令查看。

[root@localhost ~]# docker run --name web --rm -p 80 nginx

以上命令执行后会一直占用着前端,我们新开一个终端连接来看一下容器的80端口被映射到了宿主机的什么端口上

[root@localhost ~]# docker port web

80/tcp -> 0.0.0.0:49153

80/tcp -> :::49153

由此可见,容器的80端口被暴露到了宿主机的32769端口上,此时我们在宿主机上访问一下这个端口看是否能访问到容器内的站点

[root@localhost ~]# curl http://127.0.0.1:49153

Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and

working. Further configuration is required.

For online documentation and support please refer to

nginx.org.

Commercial support is available at

nginx.com.

Thank you for using nginx.

在这里插入图片描述

-P 是容器内部端口随机映射到主机的高端口。

[root@localhost ~]# docker run -P --rm --name web nginx

85544561f78f29d7501763919b929c8d160a71ad703a63a9f754d3b8cae2b1b0

[root@localhost ~]# docker port web

80/tcp -> 0.0.0.0:49154

80/tcp -> :::49154

在这里插入图片描述

iptables防火墙规则将随容器的创建自动生成,随容器的删除自动删除规则,容器退出也会删除规则。

将容器端口映射到指定IP的随机端口

[root@localhost ~]# docker run --name web --rm -p 192.168.129.250::80 nginx

在另一个终端上查看端口映射情况

[root@localhost ~]# docker port web

80/tcp -> 192.168.129.250:49153

在这里插入图片描述

将容器端口映射到宿主机的指定端口

[root@localhost ~]# docker run --name web --rm -p 80:80 nginx

在另一个终端上查看端口映射情况

[root@localhost ~]# docker port web

80/tcp -> 0.0.0.0:80

80/tcp -> :::80

[root@localhost ~]# ss -anlt

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:80 0.0.0.0:*

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

LISTEN 0 128 [::]:80 [::]😗

LISTEN 0 128 [::]:22 [::]😗

在这里插入图片描述

将容器端口映射到宿主机的指定端口

[root@localhost ~]# docker run --name web --rm -p 8080:80 nginx

在另一个终端上查看端口映射情况

[root@localhost ~]# docker port web

80/tcp -> 0.0.0.0:8080

80/tcp -> :::8080

[root@localhost ~]# ss -anlt

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

LISTEN 0 128 [::]:8080 [::]😗

LISTEN 0 128 [::]:22 [::]😗

在这里插入图片描述

自定义docker0桥的网络属性信息


官方文档相关配置

自定义docker0桥的网络属性信息需要修改/etc/docker/daemon.json配置文件

{

“bip”: “192.168.1.1/24”,

“fixed-cidr”: “192.168.1.5/25”,

“fixed-cidr-v6”: “2001:db8::/64”,

“mtu”: 1500,

“default-gateway”: “10.20.1.1”,

“default-gateway-v6”: “2001:db8🔡:89”,

“dns”: [“10.20.1.2”,“10.20.1.3”]

}

核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其它选项可通过此地址计算得出。

[root@localhost ~]# cat /etc/docker/daemon.json

{

“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”],

“bip”: “192.168.1.1/24”

}

[root@localhost ~]# systemctl restart docker

//修改成功

[root@localhost ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

link/ether 00:0c:29:20:9b:da brd ff:ff:ff:ff:ff:ff

inet 192.168.129.250/24 brd 192.168.129.255 scope global noprefixroute ens160

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe20:9bda/64 scope link

valid_lft forever preferred_lft forever

5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:67:18:f5:27 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.1/24 brd 192.168.1.255 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::42:67ff:fe18:f527/64 scope link

valid_lft forever preferred_lft forever

49: veth2117654@if48: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default

link/ether ce:6c:f2:bb:b1:f8 brd ff:ff:ff:ff:ff:ff link-netnsid 2

inet6 fe80::cc6c:f2ff:febb:b1f8/64 scope link

valid_lft forever preferred_lft forever

//如若想修改回来则

[root@localhost ~]# cat /etc/docker/daemon.json

{

“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”],

“bip”: “172.17.0.2/16”

}

[root@localhost ~]# systemctl restart docker

[root@localhost ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

link/ether 00:0c:29:20:9b:da brd ff:ff:ff:ff:ff:ff

inet 192.168.129.250/24 brd 192.168.129.255 scope global noprefixroute ens160

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe20:9bda/64 scope link

valid_lft forever preferred_lft forever

5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

link/ether 02:42:67:18:f5:27 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.2/16 brd 172.17.255.255 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::42:67ff:fe18:f527/64 scope link

valid_lft forever preferred_lft forever

51: veth9fbf5cb@if50: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default

link/ether 42:78:4d:94:c9:31 brd ff:ff:ff:ff:ff:ff link-netnsid 2

inet6 fe80::4078:4dff:fe94:c931/64 scope link

valid_lft forever preferred_lft forever

docker创建自定义桥


创建一个额外的自定义桥,区别于docker0

[root@localhost ~]# docker network ls

NETWORK ID NAME DRIVER SCOPE

49cdaf040171 bridge bridge local

5db817e300d1 host host local

1749bc1a42fc none null local

[root@localhost ~]# docker network create -d bridge --subnet “192.168.2.0/24” --gateway “192.168.2.1” br0

53c8f8b45a0d2ee5ba0f82083306cddeb065cb33b3a72f48cae2007ed966ceb5

[root@localhost ~]# docker network ls

NETWORK ID NAME DRIVER SCOPE

53c8f8b45a0d br0 bridge local

49cdaf040171 bridge bridge local

5db817e300d1 host host local

1749bc1a42fc none null local

[root@localhost ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

link/ether 00:0c:29:20:9b:da brd ff:ff:ff:ff:ff:ff

inet 192.168.129.250/24 brd 192.168.129.255 scope global noprefixroute ens160

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe20:9bda/64 scope link

valid_lft forever preferred_lft forever

5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default

link/ether 02:42:67:18:f5:27 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.2/16 brd 172.17.255.255 scope global docker0

valid_lft forever preferred_lft forever

inet6 fe80::42:67ff:fe18:f527/64 scope link

valid_lft forever preferred_lft forever

52: br-53c8f8b45a0d: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default

link/ether 02:42:a8:40:be:c0 brd ff:ff:ff:ff:ff:ff

inet 192.168.2.1/24 brd 192.168.2.255 scope global br-53c8f8b45a0d

valid_lft forever preferred_lft forever

//使用新创建的自定义桥来创建容器

[root@localhost ~]# docker run -it --name b1 --network br0 busybox

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:02:02

inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:11 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:962 (962.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

//再创建一个容器,使用默认的bridge桥

[root@localhost ~]# docker run --name b2 -it busybox

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:01

inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:8 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:696 (696.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

试想一下,此时的C1与C2能否互相通信?如果不能该如何实现通信?

img

综上所述,通不了,因为这是两个网段。docker0和br0相当于两个交换机,不同的网段要通讯就需要用到路由器,而在上面这个图中,只需要一个容器连接两个交换机即可,docker0连接br0网段 ,br0连接docker0网段,这样就可以通讯了。

[root@localhost ~]# docker network connect br0 3a6504d01028 #把默认网桥加入到br0中

//进入b2容器

[root@localhost ~]# docker exec -it b2 /bin/sh

/ # hostname

3a6504d01028

/ # ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:01

inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:14 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1116 (1.0 KiB) TX bytes:0 (0.0 B)

eth1 Link encap:Ethernet HWaddr 02:42:C0:A8:02:03

inet addr:192.168.2.3 Bcast:192.168.2.255 Mask:255.255.255.0
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

collisions:0 txqueuelen:0

RX bytes:1116 (1.0 KiB) TX bytes:0 (0.0 B)

eth1 Link encap:Ethernet HWaddr 02:42:C0:A8:02:03

inet addr:192.168.2.3 Bcast:192.168.2.255 Mask:255.255.255.0
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-1bMyRykm-1713824670766)]

[外链图片转存中…(img-hq4155eJ-1713824670766)]

[外链图片转存中…(img-Z93ePiWj-1713824670767)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

[外链图片转存中…(img-t91KHWJr-1713824670767)]

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

[外链图片转存中…(img-iofTDzId-1713824670767)]

Mybatis面试专题

[外链图片转存中…(img-IozjdBFe-1713824670768)]

MySQL面试专题

[外链图片转存中…(img-ha9KJ2mo-1713824670768)]

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值