使用 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 LISTENtcp 0 0 0.0.0.0:80 這一行代表有服務使用 通訊埠 80
(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 -
參考資料
留言
張貼留言