簡體   English   中英

將 docker 容器連接到互聯網

[英]Connect docker container to internet

我在此博客中使用 Dockerfile 創建了我的 docker 映像和容器。 https://hackernoon.com/raspberry-pi-cluster-emulation-with-docker-compose-xo3l3tyw

我能夠 ssh 進入 rpi 並且 ifconfig 返回以下狀態:

pi@raspberrypi:~ $ ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        ether 52:54:00:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 561  bytes 49862 (48.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 386  bytes 47311 (46.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 41  base 0x1000    dma 0xff

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2  bytes 100 (100.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 100 (100.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

現在我希望能夠將其連接到互聯網。 根據 docker 文檔,我嘗試使用以下方法將正在運行的容器連接到互聯網:

docker network connect multi-host-network 008796f5316a

它返回錯誤。 來自守護程序的錯誤響應:找不到網絡多主機網絡。

如何從 docker 內部連接到互聯網?

編輯:該博客討論了在 docker 上運行 qemu 並在其上安裝修改后的 raspbian(為了與 qemu 兼容)。 當我使用 docker exec 命令訪問容器時,

docker exec -it testnode bash

ifconfig 返回以下內容:

root@1f210520938c:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 637  bytes 356778 (356.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 404  bytes 39482 (39.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi 的 ifconfig 命令返回如上所示的結果。 所以,ping google.com 是在 root@ 上工作,而不是在 pi@raspberry 上工作。

我需要將 pi 直接連接到互聯網。

發生此錯誤是因為您尚未創建名為multi-host-network的 Docker 網絡。 要創建它,您可以參考Docker 文檔

默認情況下,所有 docker 容器都連接到默認bridge網絡(名稱與驅動程序類型匹配)。 對於docker-compose, bridge network with name will be created, as described [here][2]. You can check it by running will be created, as described [here][2]. You can check it by running and find your container in

由於您的容器已經連接到 Internet,因此它應該可以訪問 Internet,而無需明確將其連接到網絡。

如果沒有互聯網連接,請嘗試此問題中提出的解決方案。 我建議從

sysctl -w net.ipv4.ip_forward=1 # both on host and container
sudo service docker restart # (or sudo systemctl restart docker) on host

您遵循的說明將 QEMU 設置為使用“用戶模式網絡”。 這(有點)就像 QEMU 本身模擬一個小型 NAT 路由器和虛擬機所在的專用網絡。 這又位於 docker 容器內,並與 docker 容器的網絡設置進行通信,因此您在這里有兩層——您需要清楚這個雙層設置,以免混淆這兩個可能是您遇到任何問題的根源。

用戶模式網絡有一些限制:值得注意的是,ping 不起作用,並且您無法從外部連接到 VM,除非您設置了特定的端口轉發(說明包括來自主機端口 2222 的端口轉發到 VM 的 ssh 端口 22)。

因此,您需要弄清楚您是否可以忍受用戶模式網絡的限制,並確保您所做的任何測試都是在測試您關心的內容,而不是您可能並不真正關心的事情,例如是否特別是 ping 數據包工作。 如果您不想要用戶模式網絡,則需要設置 QEMU Tap(橋接)網絡后端,這要復雜得多,但可以讓 QEMU VM 真正作為主機網絡上的機器可見.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM