[英]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.