Docker容器的網(wǎng)絡(luò)鏈接

在docker的容器中默認(rèn)是沒有 ifconfig,ping 命令,需要手動(dòng)添加

apt-get update
apt install net-tools       # ifconfig 
apt install iputils-ping     # ping

安裝 brctl 命令

sudo apt install bridge-utils

通過 brctl 查看 容器 web的網(wǎng)絡(luò)

hejing@learning:~$ sudo brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242ddc1a384       no              veth46297f1
hejing@learning:~$

ifconfig 可以查看到 docker0 網(wǎng)橋

hejing@learning:~$ docker attach web
root@e6bb5696e362:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2939 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1775 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4194086 (4.1 MB)  TX bytes:102463 (102.4 KB)

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)

root@e6bb5696e362:/#

新加并設(shè)置網(wǎng)橋

hejing@learning:~$ sudo brctl addbr br0
hejing@learning:~$ sudo ifconfig br0 192.168.100.1 network 255.255.255.0
network: No address associated with name
ifconfig: `--help' gives usage information.
hejing@learning:~$ ifconfig
br0       Link encap:Ethernet  HWaddr 1a:83:d5:ba:65:d0
          inet addr:192.168.100.1  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::1883:d5ff:feba:65d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:5152 (5.1 KB)

docker0   Link encap:Ethernet  HWaddr 02:42:dd:c1:a3:84
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:ddff:fec1:a384/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22190 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25633 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1365895 (1.3 MB)  TX bytes:37833202 (37.8 MB)

在docker 啟動(dòng)配置文件 /etc/default/docker中添加配置 -b=br0

hejing@learning:~$ cat /etc/default/docker
# Here in Debian, this file is sourced by:
#   - /etc/init.d/docker (sysvinit)
#   - /etc/init/docker (upstart)
#   - systemd's docker.service

# Use of this file for configuring your Docker daemon is discouraged.

# The recommended alternative is "/etc/docker/daemon.json", as described in:
#   https://docs.docker.com/v1.11/engine/reference/commandline/daemon/#daemon-configuration-file

# If that does not suit your needs, try a systemd drop-in file, as described in:
#   https://docs.docker.com/v1.11/engine/admin/systemd/#custom-docker-daemon-options

DOCKER_OPTS='--registry-mirror=http://8fadea85.m.daocloud.io --label name=docker_server1 -b=br0'
hejing@learning:~$

新建容器查看網(wǎng)橋

hejing@learning:~$ docker run -it --name nwt3 2010jing/web:20171224 /bin/bash
root@f89fa63c56b7:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:c0:a8:64:04
          inet addr:192.168.100.4  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::42:c0ff:fea8:6404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1976 (1.9 KB)  TX bytes:516 (516.0 B)

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)

檢驗(yàn)設(shè)置成功靶壮。


利用 Dockerfile創(chuàng)建鏡像 ,情回顧上篇 Docker創(chuàng)建鏡像和推送到hub.docker.com

Dockerfile

FROM 2010jing/web:20171224
RUN apt install -y iputils-ping
RUN apt install -y net-tools
RUN apt update
RUN apt install -y nginx
RUN apt install -y curl
EXPOSE 80
cmd /bin/bash

構(gòu)建鏡像 docker build

hejing@learning:/dockerfile/cct$ sudo docker build -t 2010jing/cct .

同一宿主機(jī)內(nèi)容器互聯(lián)

啟動(dòng)第一個(gè)容器 ,并且啟動(dòng) nginx服務(wù),查看 ip地址

hejing@learning:~$ docker run -it --name cct1 2010jing/cct
root@361c52e5f2a1:/# nginx
root@361c52e5f2a1:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:c0:a8:64:02
          inet addr:192.168.100.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::42:c0ff:fea8:6402/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3213 (3.2 KB)  TX bytes:796 (796.0 B)

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)

啟動(dòng)第二個(gè)容器哆窿,并且查看地址

hejing@learning:~$ docker run -it --name cct2 2010jing/cct
root@8eb87baab309:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:c0:a8:64:03
          inet addr:192.168.100.3  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::42:c0ff:fea8:6403/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1774 (1.7 KB)  TX bytes:516 (516.0 B)

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)

root@8eb87baab309:/#

測試從 cct2 訪問 cct1

root@8eb87baab309:/# curl http://192.168.100.2
<!DOCTYPE html>
<html>
<head>
        <title></title>
        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js
"></script>

<style type="text/css">

        .hello{
                color:red;
        }

</style>
</head>
<body>
        <h3> welcome to <b class="hello">uic</b></h3>


        <select name="a1" id="a1" >
                <option value="a"> A</option>
                <option value="b"> B</option>
                <option value="c"> C</option>
        </select>

        <select name="a2" id="a2" >
                <option value="a"> A</option>
                <option value="b"> B</option>
                <option value="c"> C</option>
        </select>

        <select name="a3" id="a3" >
                <option value="a"> A</option>
                <option value="b"> B</option>
                <option value="c"> C</option>
        </select>

</body>

<script type="text/javascript">
        $("#a1").change(function(){
                //code...

                var selectedVal=$("#a1 ").val();  //獲取Select選擇的索引值
                var temp = "#a2 option[value='"+selectedVal+"']";
                alert(temp);
                $(temp).remove();  //刪除Select中Value='3'的Option

        });

</script>
</html>
root@8eb87baab309:/#

當(dāng)容器cct1停止再啟動(dòng),cct2嘗試去鏈接cct1

hejing@learning:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8eb87baab309        2010jing/cct        "/bin/sh -c /bin/bash"   5 minutes ago       Up 5 minutes        80/tcp              cct2
361c52e5f2a1        2010jing/cct        "/bin/sh -c /bin/bash"   8 minutes ago       Up 8 minutes        80/tcp              cct1
hejing@learning:~$ docker stop cct1
cct1
hejing@learning:~$ docker start -i cct1
root@361c52e5f2a1:/# hejing@learning:~$
hejing@learning:~$ docker attach cct2
root@8eb87baab309:/# curl http://192.168.100.2
curl: (7) Failed to connect to 192.168.100.2 port 80: Connection refused

會(huì)發(fā)現(xiàn)厉斟,以鏈接方式訪問挚躯,在容器重啟時(shí)候失效。

docker 為了避免這種情況擦秽,提供另一種方式
使用 --link 參數(shù)可以讓容器之間安全的進(jìn)行交互码荔。

格式: docker run --link=[CONTAINER_NAME]:[ALIAS]  [IMAGE] [COMMAND]

演示:
新建一個(gè)容器,當(dāng)它鏈接到cct1時(shí)候感挥,給它起個(gè)別名 webtest

hejing@learning:~$ docker run -it --name cct3 --link=cct1:webtest 2010jing/cct

ping webtest, 也就是 cct1

root@f1ccf8527981:/# ping webtest
PING webtest (192.168.100.2) 56(84) bytes of data.
64 bytes from webtest (192.168.100.2): icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from webtest (192.168.100.2): icmp_seq=2 ttl=64 time=0.121 ms
64 bytes from webtest (192.168.100.2): icmp_seq=3 ttl=64 time=0.119 ms
64 bytes from webtest (192.168.100.2): icmp_seq=4 ttl=64 time=0.117 ms

查看 env

...
WEBTEST_PORT_80_TCP_ADDR=192.168.100.2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
WEBTEST_PORT_80_TCP=tcp://192.168.100.2:80
WEBTEST_PORT=tcp://192.168.100.2:80
WEBTEST_PORT_80_TCP_PROTO=tcp
SHLVL=1
HOME=/root
WEBTEST_PORT_80_TCP_PORT=80
_=/usr/bin/env
...

/etc/hosts

root@f1ccf8527981:/# 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
192.168.100.2   webtest 361c52e5f2a1 cct1
192.168.100.4   f1ccf8527981
root@f1ccf8527981:/#

測試缩搅,停止容器,重啟啟動(dòng)链快,再鏈接

hejing@learning:~$ sudo service docker restart
[sudo] password for hejing:
hejing@learning:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
hejing@learning:~$ docker restart cct2 cct1 cct3
cct1
cct2
cct3
hejing@learning:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f1ccf8527981        2010jing/cct        "/bin/sh -c /bin/bash"   8 minutes ago       Up 24 seconds       80/tcp              cct3
8eb87baab309        2010jing/cct        "/bin/sh -c /bin/bash"   23 minutes ago      Up 25 seconds       80/tcp              cct2
361c52e5f2a1        2010jing/cct        "/bin/sh -c /bin/bash"   27 minutes ago      Up 26 seconds       80/tcp              cct1
hejing@learning:~$
hejing@learning:~$ docker attach cct3
root@f1ccf8527981:/# 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
192.168.100.3   webtest 361c52e5f2a1 cct1 
192.168.100.4   f1ccf8527981
root@f1ccf8527981:/#

可以對比前后誉己,webtest的ip 重啟之后 由192.168.100.2 變成 192.168.100.3眉尸。


拒絕所有容器間的訪問

Docker 守護(hù)進(jìn)程的啟動(dòng)選項(xiàng) --icc = false
修改配置文件 /etc/default/docker

DOCKER_OPTS=' --icc=false --registry-mirror=http://8fadea85.m.daocloud.io --label name=docker_server1 -b=br0'

重啟docker和容器

hejing@learning:~$ sudo service docker restart
hejing@learning:~$ docker restart cct1 cct2 cct3
cct1
cct2
cct3
hejing@learning:~$ docker attach cct3
root@f1ccf8527981:/# ping webtest
PING webtest (192.168.100.2) 56(84) bytes of data.

發(fā)現(xiàn)ping不成功域蜗。

允許特定容器間的鏈接

Docker 守護(hù)進(jìn)程的啟動(dòng)選項(xiàng)
--icc = false
--iptables = true
-- link

添加 --iptables=true 到配置文件 /etc/default/docker

root@f1ccf8527981:/# ps -ef | grep docker
root        14     6  0 08:38 ?        00:00:00 grep --color=auto docker
root@f1ccf8527981:/# hejing@learning:~$ ps -ef | grep docker
root     13097     1  0 16:35 ?        00:00:01 /usr/bin/dockerd -H fd:// --icc=false --iptables=true --registry-mirror=http://8fadea85.m.daocloud.io --label name=docker_server1 -b=br0

重啟docker和容器

root@f1ccf8527981:/docker attach cct3
hejing@learning:~$ sudo vim /etc/default/docker
hejing@learning:~$ sudo service docker restart
hejing@learning:~$ docker restart cct1 cct2 cct3
cct1
cct2
cct3

回到 cct1容器 并且啟動(dòng) nginx服務(wù)

hejing@learning:~$ docker attach cct1
root@361c52e5f2a1:/# nginx
root@361c52e5f2a1:/# hejing@learning:~$
hejing@learning:~$

切回 cct3 訪問 cct1

hejing@learning:~$
hejing@learning:~$ docker attach cct3
root@f1ccf8527981:/# curl webtest
<!DOCTYPE html>
<html>
<head>
        <title></title>
        <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js
"></script>

<style type="text/css">

        .hello{
                color:red;
        }

</style>
</head>
<body>
        <h3> welcome to <b class="hello">uic</b></h3>


        <select name="a1" id="a1" >
                <option value="a"> A</option>
                <option value="b"> B</option>
                <option value="c"> C</option>
        </select>

        <select name="a2" id="a2" >
                <option value="a"> A</option>
                <option value="b"> B</option>
                <option value="c"> C</option>
        </select>

        <select name="a3" id="a3" >
                <option value="a"> A</option>
                <option value="b"> B</option>
                <option value="c"> C</option>
        </select>

</body>

<script type="text/javascript">
        $("#a1").change(function(){
                //code...

                var selectedVal=$("#a1 ").val();  //獲取Select選擇的索引值
                var temp = "#a2 option[value='"+selectedVal+"']";
                alert(temp);
                $(temp).remove();  //刪除Select中Value='3'的Option

        });

</script>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巨双,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霉祸,更是在濱河造成了極大的恐慌筑累,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丝蹭,死亡現(xiàn)場離奇詭異慢宗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)奔穿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門镜沽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贱田,你說我怎么就攤上這事缅茉。” “怎么了男摧?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵蔬墩,是天一觀的道長。 經(jīng)常有香客問我耗拓,道長拇颅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任乔询,我火速辦了婚禮樟插,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哥谷。我一直安慰自己岸夯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布们妥。 她就那樣靜靜地躺著猜扮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪监婶。 梳的紋絲不亂的頭發(fā)上旅赢,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音惑惶,去河邊找鬼煮盼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛带污,可吹牛的內(nèi)容都是我干的僵控。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鱼冀,長吁一口氣:“原來是場噩夢啊……” “哼报破!你這毒婦竟也來了悠就?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤充易,失蹤者是張志新(化名)和其女友劉穎梗脾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盹靴,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炸茧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稿静。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梭冠。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖改备,靈堂內(nèi)的尸體忽然破棺而出妈嘹,到底是詐尸還是另有隱情,我是刑警寧澤绍妨,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布润脸,位于F島的核電站,受9級特大地震影響他去,放射性物質(zhì)發(fā)生泄漏毙驯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一灾测、第九天 我趴在偏房一處隱蔽的房頂上張望爆价。 院中可真熱鬧,春花似錦媳搪、人聲如沸铭段。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽序愚。三九已至,卻和暖如春等限,著一層夾襖步出監(jiān)牢的瞬間爸吮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工望门, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留形娇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓筹误,卻偏偏與公主長得像桐早,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容