解決 Python Flask 網站伺服器已經啟動,卻無法連線的問題

使用 Python 和 Flask 建立 Web 應用程式,明明網站伺服器已經啟動,卻無法連線的問題。可檢查 IP 設定,如果使用 Docker 則需要檢查 EXPOSE PORT。


解決方式

1. 如果使用 Linux 作業系統,需要修改 Web 應用程式的 IP

如果 Flask 使用 Windows 作業系統,沒有特殊考量,網站 IP 設定 127.0.0.1 就可以從本機連線。但如果架在 Linux 作業系統,則需要修改 IP 為 0.0.0.0,否則無法連線到 Web 應用程式。Flask 啟動網站服務成功後會看到

Serving on http://0.0.0.0:5000

2. 如果使用 Docker 安裝 Flask,則需要設定 Docker container 對外的通訊埠 (port)

Flask Web 應用程式的啟動 Docker container 指令中「-p  5000:5000」

  • 第一個通訊埠 5000 是 host 的通訊埠,代表瀏覽器輸入網站連結的通訊埠 http://0.0.0.0:5000
  • 第二個通訊埠 5000 則是 Docker container 內啟動 Flask 的通訊埠
完整指令:

docker run -i -t -p 5000:5000 continuumio/anaconda3 /bin/bash

如果要修改瀏覽器輸入連結的通訊埠 http://0.0.0.0:0:5000 改成 http://0.0.0.0:80,啟動 Docker container 的指令可以改成:

docker run -i -t -p 80:5000 continuumio/anaconda3 /bin/bash

設定方式詳見 Docker Expose Port: How To Expose or Publish Docker Ports

3. 檢查 host 的通訊埠是否有對外開放

如果通訊埠 80 是 host 對外的通訊埠

    (1) 使用瀏覽器開啟 host_ip:80 確認可否連線

    (2) 登入到 host 查看 port 80 是否有服務啟動,可輸入指令 netstat -tulpn | grep LISTEN

$ netstat -tulpn | grep LISTEN
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
...
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
      tcp 0 0 0.0.0.0:80 這一行代表有服務使用 通訊埠 80


參考資料

留言