1. 程式人生 > >docker 容器間網路配置

docker 容器間網路配置

建立一個docker容器,docker系統會自動為該容器分配一個ip地址,通常是172.17開頭。

我們可以在主機上用 docker inspect 命令 或者進入容器用ifconfig命令來檢視容器的ip地址。

假設某個容器(假設容器的名稱為myweb)被分配的地址是 172.17.0.2,該容器上啟動了一個web服務,其埠號是80(注意這是容器中的埠號)。

這時我們用docker port命令可以檢視該web服務在容器的埠對應到主機埠的資訊,如:

docker port myweb

輸出
80/tcp -> 0.0.0.0:32776

一、這時我們在docker主機上可通過如下方式訪問容器的服務

1、方式一:

curl  http://localhost:32776

2、方式二:

假設主機的ip地址為192.168.142.138

curl  http://192.168.142.138:32776

這樣docker主機區域網內的機器就可以通過主機的地址和繫結的ip來訪問到docker容器上的服務了。不過這存在的問題是,需要將容器埠與主機上埠的對映關係變成固定的。否則一旦容器重啟,繫結埠就會變了。

3、方式三:

假設容器的ip地址為 172.17.0.2

curl http://172.17.0.2:80

 

二、其它容器訪問該容器的web服務

現在啟動另外一個容器,在該容器中要訪問myweb容器提供的web服務,可以用如下方式:

1、方式一:直接通過容器的ip地址訪問

curl  http://172.17.0.2:80

說明:這麼做是可以的,但問題是容器的ip地址是自動分配的,一旦提供該web服務的容器重啟後,其ip可能發生變化。這就導致原來指定的ip有問題了。

2、方式二:通過主機地址和對映埠訪問

curl http://192.168.142.138:32776

說明:這存在的問題是,埠的對映是自動的,容器一旦重啟後會發生變化。

 

總結下,如果某個容器提供了對外的服務(如web服務),則統一的訪問方式可以利用docker主機的ip地址和容器對映到主機上的埠來統一訪問。

 

三、容器之間互聯的另外一種方式

docker提供了一種機制,可以讓一個容器和另一個容器很方便的連線起來。舉例:

docker run --name test1 --link myweb:web -it ubuntu /bin/bash

上面命令建立了一個新的容器test1。 這裡引入了一個新的標記 --link,其引數部分的myweb表示要連線的容器,web是要連線的容器的別名。

容器建立後,我們用 ping web命令發現能連線到myweb容器,這樣因為用的不是ip地址,而是別名。這樣即使myweb1容器重啟後,上面建立的test1容器對其連線的程式碼或指令碼也不用修改。

假設myweb容器提供了web服務,容器內的埠是80.

這時在test1容器內可以用如下方式訪問:  curl  http://web:80

顯然,這種方式的優點是不再指定ip地址,即使 myweb容器重啟後ip地址變了也沒關係。

 注意:需要注意的是,如果myweb容器未啟動,但有別的容器啟動,test1容器利用別名web可能會關聯到別的容器上,這是個問題。