docker創(chuàng)建成功卻無法連接怎么辦

寫在前面:
本文主要講述了docker創(chuàng)建成功但是無法連接的原因和解決方案,是一篇針對docker初學(xué)者的實(shí)踐文章。文章中的操作和解決方案都是基于ubuntu系統(tǒng)環(huán)境的。

在使用docker的過程中,有一些情況即使你的容器創(chuàng)建成功了,但是無法連接。這種情況往往讓人很苦惱,找不到問題的所在。本文將通過一個(gè)實(shí)際案例,為大家講解docker創(chuàng)建成功卻無法連接的原因及解決方案。

案例描述:

我們在本地電腦上,使用docker創(chuàng)建了一個(gè)nginx容器,訪問它的時(shí)候卻無法連接成功。
步驟如下:

  1. 在Ubuntu系統(tǒng)上安裝docker

在命令行輸入如下指令:

sudo apt-get install docker.io

安裝完成后,使用如下指令啟動(dòng)docker:

sudo systemctl start docker

  1. 在docker上創(chuàng)建nginx容器

在命令行輸入如下指令:

sudo docker run –name mynginx -p 80:80 -d nginx

這個(gè)命令的意思是:使用nginx鏡像創(chuàng)建一個(gè)新容器,容器的名稱為mynginx,將80端口映射到本地的80端口上,并通過后臺方式運(yùn)行。

  1. 驗(yàn)證容器是否創(chuàng)建成功

在命令行輸入如下指令:

sudo docker ps

如果顯示如下內(nèi)容,表示容器創(chuàng)建成功:

CONTAINER ID ? ? ? ?IMAGE ? ? ? ? ? ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? ? ? STATUS ? ? ? ? ? ? ?PORTS ? ? ? ? ? ? ? ?NAMES
aaed7c1bcccf ? ? ? ?nginx ? ? ? ? ? ? ? “/docker-entrypoint.…” ? 21 seconds ago ? ? ?Up 20 seconds ? ? ? 0.0.0.0:80->80/tcp ? mynginx

  1. 瀏覽器中訪問nginx

在瀏覽器中輸入localhost,或者127.0.0.1,即可看到nginx的歡迎界面。

但是,有些情況會(huì)出現(xiàn)訪問不到nginx的情況。

問題分析:

首先,我們需要確認(rèn)一下問題出在哪里。

  1. 查看系統(tǒng)防火墻配置

Ubuntu系統(tǒng)的默認(rèn)防火墻工具是ufw,可以使用如下指令查看其配置:

sudo ufw status

如果輸出結(jié)果如下,則表示系統(tǒng)防火墻是開啟的:

Status: active

To ? ? ? ? ? ? ? ? ? ? ? ? Action ? ? ?From


22/tcp ? ? ? ? ? ? ? ? ? ? ALLOW ? ? ? Anywhere
80/tcp ? ? ? ? ? ? ? ? ? ? ALLOW ? ? ? Anywhere
22/tcp (v6) ? ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere (v6)
80/tcp (v6) ? ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere (v6)

這時(shí)候,我們需要確認(rèn)一下80端口是否已經(jīng)被允許通過系統(tǒng)防火墻。通過上面的輸出可以看到,80端口已經(jīng)被允許訪問,因此這個(gè)不是問題所在。

  1. 網(wǎng)絡(luò)連接狀態(tài)

如果我們使用ping命令查看一下127.0.0.1的網(wǎng)絡(luò)連接狀態(tài),會(huì)發(fā)現(xiàn)出現(xiàn)如下錯(cuò)誤提示:

ping: connect: Network is unreachable

這說明網(wǎng)絡(luò)連接問題出在這里。繼續(xù)排查原因。

  1. 本地網(wǎng)絡(luò)地址是否正確

嘗試連接nginx容器的本地網(wǎng)絡(luò)地址,因?yàn)槲覀儎?chuàng)建容器時(shí),將80端口映射到了本地的80端口上,因此我們需要使用容器的本地網(wǎng)絡(luò)地址進(jìn)行訪問。可以使用如下指令查看本地容器地址:

sudo docker inspect mynginx | grep IPAddress

響應(yīng)結(jié)果應(yīng)該類似于:

“IPAddress”: “172.17.0.2”,

嘗試在瀏覽器中訪問172.17.0.2,可以看到nginx歡迎頁面。說明此時(shí)端口映射和防火墻規(guī)則都是正確的。問題出在本地網(wǎng)絡(luò)地址設(shè)置上。

解決方案:

修改nginx配置文件,在配置文件中添加一個(gè)server節(jié)點(diǎn),hostname為本機(jī)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; }  # 新增的本機(jī)IP節(jié)點(diǎn) server {     listen 80;     listen [::]:80;      server_name <本機(jī)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的歡迎頁面了。

總結(jié):

docker創(chuàng)建成功卻無法連接的問題,可能與網(wǎng)絡(luò)連接狀態(tài)、系統(tǒng)防火墻配置、本地網(wǎng)絡(luò)地址設(shè)置等有關(guān)。通過排查問題所在,并采取相應(yīng)的解決方案,可以順利解決。在今后的docker使用過程中,遇到問題不要慌張,要靜下心來,細(xì)致的查看日志,確定問題所在,再制定處理方案,才能更好的掌握docker技術(shù),提高開發(fā)效率。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享