1.在CentOS虛擬機中啓動一個Docker容器
# 創建並運行一個名字爲runoob-nginx-test 的nginx 容器,映射端口號8083->80
[root@localhost ~]# docker run --name runoob-nginx-test -p 8083:80 -d nginx
WARNING: IPv4 forwarding is disabled. Networking will not work.
2fa62135a96a93a575302cbf52e23a5bcc08c1fecc0d16e1176a83a7dc79398c
[root@localhost ~]# docker ps # 查看運行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS
2fa62135a96a nginx "nginx -g 'daemon of…" 6 seconds ago Up 5 seconds
PORTS NAMES
0.0.0.0:8083->80/tcp runoob-nginx-test
在瀏覽器訪問 127.0.0.1:8081 時,顯示無法訪問。
原因:
Docker運行在Linux虛擬機上,在Windows瀏覽器上訪問 127.0.0.1:8081 其實是在訪問Linux虛擬機的地址,而不是Docker容器的地址。比如:Windows系統是A,Linux虛擬機是B,Docker容器是C。
其中A訪問B、B訪問C是互通的,A訪問C就需要一個路由來轉發數據包才能訪問。就和網絡之間連接需要路由器進行轉發數據包一樣。如果不在同一個局域網的主機進行通信的話,依靠路由進行數據轉發。並且,沒有去手動設置路由就會發往默認路由,導致兩臺主機無法正常進行通信。
解決:
在Windows上添加路由, 比如:windows系統IP地址爲 192.168.0.103(在CMD中通過ipconfig查看),Docker IP地址爲172.17.0.1(在Linux終端下通過 ifconfig 查看),虛擬機的IP地址爲 192.168.0.104。很明顯虛擬機和Windows系統在同一個局域網內。
在搜索框輸入cmd,然後右擊以管理員的身份運行。添加路由,輸入以下內容:
C:\Windows\system32>route add -p 172.17.0.0 mask 255.255.0.0 192.168.0.103
操作完成!
C:\Windows\system32>ping 172.17.0.1
正在 Ping 172.17.0.1 具有 32 字節的數據:
來自 172.17.0.1 的回覆: 字節=32 時間<1ms TTL=64
來自 172.17.0.1 的回覆: 字節=32 時間<1ms TTL=64
來自 172.17.0.1 的回覆: 字節=32 時間<1ms TTL=64
來自 172.17.0.1 的回覆: 字節=32 時間<1ms TTL=64
現在就可以在瀏覽器通過地址 172.17.0.1:8083 訪問nginx服務器