docker容器上網
❶ docker網路問題 怎麼解決
網路基礎 Docker 現有的網路模型主要是通過使用 Network namespace、Linux Bridge、iptables、veth pair 等技術實現的。(出處8) Network namespace:它主要提供了網路資源的隔離,包括網路設備、IPv4/IPv6 協議棧、IP 路由表、防火牆、/proc/net 目錄、/sys/class/net 目錄、埠(socket)等。 Linux Bridge:功能相當於物理交換機,為連在其上的設備(容器)轉發數據幀,如 docker0 網橋。 Iptables:主要為容器提供 NAT 以及容器網路安全。 veth pair:兩個虛擬網卡組成的數據通道。在 Docker 中,用於連接 Docker 容器和 Linux Bridge。一端在容器中作為 eth0 網卡,另一端在 Linux Bridge 中作為網橋的一個埠。 容器的網路模式 用來設置網路介面的 docker run --net 命令,它的可用參數有四個: none:關閉了 container 內的網路連接。容器有獨立的 Network namespace,但並沒有對其進行任何網路設置,如分配 veth pair 和網橋連接,配置 IP 等。 bridge:通過 veth 介面來連接其他 container。這是 docker 的默認選項。 host:允許 container 使用 host 的網路堆棧信息。容器和宿主機共享 Network namespace。 container:使用另外一個 container 的網路堆棧信息。kubernetes 中的 pod 就是多個容器共享一個 Network namespace。 我們需要從中選一個作為我們的網路方案,實際上只有 bridge 和 host 兩種模式可選。(想了解這四個參數,請翻到附錄B之 Network settings。) 在 docker 默認的網路環境下,單台主機上的容器可以通過 docker0 網橋直接通信,如下圖(圖作者馮明振)所示:
❷ docker容器里網路請求慢怎麼解決
docker網路里的速度復取決於你的制網路模式和dns配置,具體看下面的博客介紹
docker容器內網路請求緩慢問題解決:
https://www.embbnux.com/2016/10/06/docker-container-network-too-slow-timeout/
❸ docker 訪問不了外部網路嗎
宿主機啟docker候 docker0 虛擬網卡容器都通外面通信
❹ docker容器默認能上網嗎
docker 鏡像是無法連接外網,只有通過部署這個鏡像的容器才能實現訪問外網。查看此鏈接,詳細介紹如何使用docker鏡像,docker容器等功能,網頁鏈接
❺ 如何用Docker 管理 Linux Container 容器與網路設置
當前Ubuntu 系統下的 Docker 的安裝包只提供64位。如果你想運行32位的 Docker,你需要。
安裝 Docker
通過 apt-get 安裝 Docker 簡直是小菜一碟。
$ sudo apt-get install docker.io
如果你不是 root 組的用戶,你可以把自己加入到 docker 用戶組。下面的命令可以讓沒有 root 許可權的用戶使用 Docker:
$ sudo usermod -a -G docker $USER
重新登錄,以便讓你的用戶組許可權生效。
下一步是編輯 Docker 配置文件,確定 Docker 可執行文件的路徑:
$ sudo vi /etc/default/docker.io
DOCKER= /usr/bin/docker.io
重啟 Docker 服務:
$ sudo service docker.io restart
管理 Docker Container 容器
如果你想在新的 Docker 容器下創建一個新的 Ubuntu 操作系統,你首先需要 pull 一個 的 Docker 鏡像。下面的命令可以通過網路下載 Docker 鏡像:
$ docker pull ubuntu
你可以使用下面的命令啟動 Docker 裡面的 Ubuntu 系統。最後的參數 /bin/bash 表示一旦容器啟動,首先會執行簡單的 bash。
$ docker run -i -t ubuntu /bin/bash
上面的命令會立即啟動 Ubuntu container 容器(這是一個完美的容器!),然後它會提供一個 shell 提示符運行環境給你。現在開始你可以通過這個沙箱環境訪問一個完整的 Ubuntu 系統了。輸入 exit 命令退出 Docker 容器。
你也可以用下面的命令進入不同的系統。比如 Fedora:
$ docker.io run -i -t fedora /bin/bash
如果系統中還不存在 Fedora Docker 鏡像,這個命令會自動下載它,然後啟動這個 Fedora 的 Docker 容器。如果你想要開啟指定版本的系統,比如 Ubuntu 13.04,你可以使用下面的命令:
$ docker.io run -i -t ubuntu:13.04 /bin/bash
Container 容器網路設置
Docker 使用 Linux 橋接技術與其他容器通信,以及連通外網。安裝完 Docker 後你應該可以看到 docker0 這個網橋,這是 Docker 默認創建的。你創建的每個容器都會通過這個網橋連接到網路。自定義 Linux 網橋
如果你想自定義網橋,你可以執行以下步驟。你可以在這個網橋後面分配一個子網,並為這個子網分配地址。下面的命令會為 Docker 子網分配 10.0.0.0/24 地址段:
$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0
然後在 /etc/default/docker.io 文件的 DOCKER_OPTS 變數里添加 -b=br0 選項,並重啟 Docker 服務:
$ sudo service docker.io restart
到目前為止,任何創建的容器都會連上 br0 網橋,它們的 IP 地址會從 10.0.0.0/24 中自動分配(譯註:在10.0.0.2到10.0.0.254之間隨機分配)。
其他自定義設置
你可以通過 /etc/default/docker.io 文件的 DOCKER_OPTS 變數設置其他一些屬性:
-dns 8.8.8.8 -dns 8.8.4.4 : 為容器指定 DNS 伺服器。
-icc=false : 將容器與其他容器隔離出來
疑難解答
1、當你運行 docker.io 命令時,你可能會遇到以下問題:
dial unix /var/run/docker.sock: no such file or directory
這個錯誤可能是由於 Docker 後台進程沒有啟動。檢查下 Docker 後台進程的狀態,確認它已經處於啟動狀態:
$ sudo service docker.io status$ sudo service docker.io start
❻ 怎麼設置Docker容器網路不能外網
怎麼設置Docker容器網路不能外網
在你的宿主機啟動docker的時候會多出一個 docker0 的虛擬網卡,然後容器都通過這個和外面通信。
❼ 怎麼直接訪問docker內部網路
docker run -p xxx:yyy images名稱
就可以將docker容器的yyy埠映射到xxx上,然後訪問ip:xxx就可以將訪問的請求轉發到yyy埠
❽ 如何在 docker 容器之間設置網路
在使用weave之前,你需要在所有宿主機上安裝Docker環境,參考這些教程,在Ubuntu或CentOS/Fedora發行版中安裝Docker。Docker環境部署完成後,使用下面的命令安裝weave:$wget/zettio/weave/releases/download/latest_release/weave$chmoda+xweave$sudocpweave/usr/local/bin注意你的PATH環境變數要包含/usr/local/bin這個路徑,請在/etc/profile文件中加入一行(LCTT譯註:要使環境變數生效,你需要執行這個命令:source/etc/profile):exportPATH="$PATH:/usr/local/bin"在每台宿主機上重復上面的操作。Weave在TCP和UDP上都使用6783埠,如果你的系統開啟了防火牆,請確保這兩個埠不會被防火牆擋住。在每台宿主機上啟動Weave路由器當你想要讓處於在不同宿主機上的容器能夠互相通信,第一步要做的就是在每台宿主機上啟動weave路由器。第一台宿主機,運行下面的命令,就會創建並開啟一個weave路由器容器(LCTT譯註:前面說過了,weave路由器也是一個容器):$sudoweavelaunch第一次運行這個命令的時候,它會下載一個weave鏡像,這會花一些時間。下載完成後就會自動運行這個鏡像。成功啟動後,終端會輸出這個weave路由器的ID號。下面的命令用於查看路由器狀態:$sudoweavestatus第一個weave路由器就緒了,目前為止整個peer對等網路中只有一個peer成員。你也可以使用docker的命令來查看weave路由器的狀態:$dockerps第二台宿主機部署步驟稍微有點不同,我們需要為這台宿主機的weave路由器指定第一台宿主機的IP地址,命令如下:$sudoweavelaunch當你查看路由器狀態,你會看到兩個peer成員:當前宿主機和第一個宿主機。當你開啟路由器,這個peer成員列表會更長。當你新開一個路由器時,要指定前一個宿主機的IP地址,請注意不是第一個宿主機的IP地址(LCTT譯註:鏈狀結構)。現在你已經有了一個weave網路了,它由位於不同宿主機的weave路由器組成。把不同宿主機上的容器互聯起來接下來要做的就是在不同宿主機上開啟Docker容器,並使用虛擬網路將它們互聯起來。假設我們創建一個私有網路10.0.0.0/24來互聯Docker容器,並為這些容器隨機分配IP地址。如果你想新建一個能加入weave網路的容器,你就需要使用weave命令來創建,而不是docker命令。原因是weave命令內部會調用docker命令來新建容器然後為它設置網路。下面的命令是在宿主機hostA上建立一個Ubuntu容器,然後將它放到10.0.0.0/24網路中,分配的IP地址為10.0.0.1:hostA:~$sudoweaverun10.0.0.1/24-t-iubuntu成功運行後,終端會顯示出容器的ID號。你可以使用這個ID來訪問這個容器:hostA:~$dockerattach在宿主機hostB上,也創建一個Ubuntu容器,IP地址為10.0.0.2:hostB:~$sudoweaverun10.0.0.2/24-t-iubuntu訪問下這個容器的控制台:hostB:~$dockerattach這兩個容器能夠互相ping通,你可以通過容器的控制台檢查一下。如果你檢查一下每個容器的網路配置,你會發現有一塊名為「ethwe」的網卡,你分配給容器的IP地址出現在它們那裡(比如這里分別是10.0.0.1和10.0.0.2)。Weave的其他高級用法weave提供了一些非常巧妙的特性,我在這里作下簡單的介紹。應用分離使用weave,你可以創建多個虛擬網路,並為每個網路設置不同的應用。比如你可以為一群容器創建10.0.0.0/24網路,為另一群容器創建10.10.0.0/24網路,weave會自動幫你維護這些網路,並將這兩個網路互相隔離。另外,你可以靈活地將一個容器從一個網路移到另一個網路而不需要重啟容器。舉個例子:首先開啟一個容器,運行在10.0.0.0/24網路上:$sudoweaverun10.0.0.2/24-t-iubuntu然後讓它脫離這個網路:$sudoweavedetach10.0.0.2/24最後將它加入到10.10.0.0/24網路中:$sudoweaveattach10.10.0.2/24現在這個容器可以與10.10.0.0/24網路上的其它容器進行通信了。這在當你創建一個容器而網路信息還不確定時就很有幫助了。將weave網路與宿主機網路整合起來有時候你想讓虛擬網路中的容器能訪問物理主機的網路。或者相反,宿主機需要訪問容器。為滿足這個功能,weave允許虛擬網路與宿主機網路整合。舉個例子,在宿主機hostA上一個容器運行在10.0.0.0/24中,運行使用下面的命令:hostA:~$sudoweaveexpose10.0.0.100/24這個命令把IP地址10.0.0.100分配給宿主機hostA,這樣一來宿主機hostA也連到了10.0.0.0/24網路上了。顯然,你在為宿主機選擇IP地址的時候,需要選一個沒有被其他容器使用的地址。現在hostA就可以訪問10.0.0.0/24上的所有容器了,不管這些容器是否位於hostA上。好巧妙的設定啊,32個贊
❾ docker鏡像能上網嗎
docker 鏡像是無法連接外網,只有通過部署這個鏡像的容器才能實現訪問外網。查看此鏈接,詳細介紹如何使用docker鏡像,docker容器等功能,網頁鏈接
❿ 如何在 Docker 容器之間設置網路
在你的宿主機啟動docker的時候會多出一個docker0的虛擬網卡,然後容器都通專過這個和外面通信。容器和docker宿主機屬之間是NAT的方式共享網路的,也就是說宿主機可以訪問的資源,容器也是可以直接訪問,你要使用apt-get,你就要保證你的宿主機可以上外網,否則免談。