容器有自己的內部網路和 ip 位址(容器互聯)

2021-08-15 18:22:17 字數 4359 閱讀 5987

容器有自己的內部網路和 ip 位址

容器互聯:

如果你之前有 docker 使用經驗,你可能已經習慣了使用 --link 引數來使容器互聯。

隨著 docker 網路的完善,強烈建議大家將容器加入自定義的 docker 網路來連線多個容器,

而不是使用 --link 引數。

新建網路

下面先建立乙個新的 docker 網路。

$ docker network create -d bridge my-net

-d 引數指定 docker 網路型別,有 bridge overlay 。其中 overlay 網路型別用於

swarm mode,在本小節中你可以忽略它。

連線容器

執行乙個容器並連線到新建的 my-net 網路

$ docker run -it --rm --name busybox1 --network my-net busybox sh

開啟新的終端,再執行乙個容器並加入到 my-net 網路

$ docker run -it --rm --name busybox2 --network my-net busybox sh

再開啟乙個新的終端檢視容器資訊

$ docker container ls

container id image command created status

ports names

b47060aca56b busybox "sh" 11 minutes ago up 11

minutes busybox2

8720575823ec busybox "sh" 16 minutes ago up 16

minutes busybox1

下面通過 ping 來證明 busybox1 容器和 busybox2 容器建立了互聯關係。

在 busybox1 容器輸入以下命令

/ # ping busybox2

ping busybox2 (172.19.0.3): 56 data bytes

64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms

64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

用 ping 來測試連線 busybox2 容器,它會解析成 172.19.0.3 。

同理在 busybox2 容器執行 ping busybox1 ,也會成功連線到。

/ # ping busybox1

ping busybox1 (172.19.0.2): 56 data bytes

64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms

64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms

這樣, busybox1 容器和 busybox2 容器建立了互聯關係。

通過link方式互聯

docker run --name db -e mysql_root_password=server -d mysql
sudo docker run -d --name web --link db:aliasdb nginx
path=/usr/local

/sbin:/usr

/local/bin

:/usr/sbin

:/usr/bin

:/sbin

:/bin

:/usr/local/mysql/bin

:/usr/local/mysql/scripts

hostname=c1a7c7f091eb

mysql_root_password=server

mysql_major=5.5

mysql_version=5.5.48

home=/root

path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

hostname=6337c0044215

aliasdb_port=tcp:

aliasdb_port_3306_tcp=tcp:

aliasdb_port_3306_tcp_addr=172.17.0.8

aliasdb_port_3306_tcp_port=3306

aliasdb_port_3306_tcp_proto=tcp

aliasdb_name=/web/aliasdb

aliasdb_env_mysql_root_password=server

aliasdb_env_mysql_major=5.5

aliasdb_env_mysql_version=5.5.48

nginx_version=1.9.10-1~jessie

home=/root

第二個部分則是aliasdb_env開頭的變數,這些都是從source container中匯入的,變數**於dockerfile中使用env命令定義的變數,或者是docker run的時候通過-e 新增的環境變數。

第三個部分是aliasdb_name 這個變數,這變數記錄了link的兩個容器的組合,這裡就是/web/db第四個部分就是aliasdb_port開頭的一系列變數,這些變數會有很組,每組變數的命名格式如下

_port__

_port___port

_port___proto

_port___addr

172.17

.0.10 6337c0044215

127.0

.0.1

localhost

::1localhost

ip6-localhost

ip6-loopback

fe00

::0ip6-localnet

ff00

::0ip6-mcastprefix

ff02

::1ip6-allnodes

ff02

::2ip6-allrouters

172.17

.0.8

aliasdb

c1a7c7f091eb

db

對link的容器可以使用別名

安全的容器間連線通訊

環境變數的注入

安全的隔離環境

動態的附加或者脫離乙個網路

支援使用–link設定別名

linking containers in user-defined networks

內部網路中專用IP位址規劃

一 在國際建議標準中 文件rfc1918 在規劃內部網路的專用ip位址中認為 使用專用位址規劃乙個內部網路位址系統時,首選的方案是使用a類位址中的專用ip位址塊。理由主要有以下兩個 1 該位址塊覆蓋從10.0.0.0到10.255.255.255的位址空間,由使用者分配的子網號與主機號的總長度為24...

如何修改ip位址來更換自己的網路IP位址

我們這裡說的修改ip位址,指的是公網ip位址,而不是內網ip位址。每一台能上網的裝置,都會有乙個公網ip,也就是網路ip位址。在什麼情況下需要改自己的網路ip位址呢?現在很多任務作都是需要網路來實現的,很多網路工作人員,在工作的時候,ip被限制封鎖等情況是需要換ip的。像我們一條寬頻,只有乙個外網i...

如何檢視容器的IP位址和網路相關的引數

sudo docker ps檢視正在執行的容器的id等資訊 sudo docker inspect 容器id 可以檢視到容器的相關資訊 docker inspect format 容器id 可以檢視容器的具體ip位址,如果輸出是空的說明沒有配置ip位址 ifconfig檢視容器內的網路 cat et...