寫在前面:
本文主要講述了docker創建成功但是無法連接的原因和解決方案,是一篇針對docker初學者的實踐文章。文章中的操作和解決方案都是基於Ubuntu系統環境的。
在使用docker的過程中,有些情況即使你的容器建立成功了,但是無法連線。這種情況往往讓人很苦惱,找不到問題的所在。本文將透過一個實際案例,為大家解釋docker創建成功卻無法連接的原因及解決方案。
案例描述:
我們在本機上,使用docker建立了一個nginx容器,而存取它的時候卻無法連線成功。
步驟如下:
在指令列輸入下列指令:
sudo apt-get install docker. io
安裝完成後,使用以下指令啟動docker:
sudo systemctl start docker
#在命令列輸入如下指令:
sudo docker run --name mynginx -p 80:80 -d nginx
這個指令的意思是:使用nginx映像建立一個新容器,容器的名稱為mynginx,將80埠對應到本地的80埠上,並透過後台方式運作。
在命令列輸入以下指令:
sudo docker ps
如果顯示如下內容,表示容器建立成功:
CONTAINER ID IMAGE COMMAND PORTS NAMES
aaed7c1bcccf nginx 0.0.0.0:80->80/tcp mynginx
在瀏覽器中輸入localhost,或127.0.0.1,即可看到nginx的歡迎介面。
但是,有些情況會出現無法存取nginx的情況。
問題分析:
首先,我們要確認問題出在哪裡。
Ubuntu系統的預設防火牆工具是ufw,可以使用下列指令查看其配置:
sudo ufw status
若產出結果如下,表示系統防火牆是開啟的:
Status: active
To ALLOW Anywhere
80/tcp ALLOW Anywhere
這時候,我們需要確認80埠是否已經被允許通過系統防火牆。透過上面的輸出可以看到,80埠已經被允許訪問,因此這個不是問題所在。
這表示網路連線問題出在這裡。繼續排查原因。
本機網路位址是否正確回應結果應該類似於:
"IPAddress": "172.17.0.2",
嘗試在瀏覽器中造訪172.17.0.2,可以看到nginx歡迎頁面。說明此時連接埠對映和防火牆規則都是正確的。問題出在本地網路位址設定。
解決方案:
修改nginx設定文件,在設定檔中新增一個server節點,hostname為本機IP位址,如下:
server {
listen 80 default_server; listen [::]:80 default_server; server_name localhost; root /var/www/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } # 新增的本机IP节点 server { listen 80; listen [::]:80; server_name <本机IP>; root /var/www/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } }
}
修改完成後,重新載入nginx設定檔:
sudo nginx -s reload
再次存取localhost或127.0.0.1,在瀏覽器中就可以看到nginx的歡迎頁了。
總結:
docker建立成功卻無法連線的問題,可能與網路連線狀態、系統防火牆配置、本機網路位址設定等有關。透過排查問題所在,並採取對應的解決方案,可以順利解決。在未來的docker使用過程中,遇到問題不要慌張,要靜下心來,細緻的查看日誌,確定問題所在,再製定處理方案,才能更好的掌握docker技術,提高開發效率。
以上是docker建立成功卻無法連線怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!