用Docker在騰訊云部署網(wǎng)頁應(yīng)用English Pal
期望效果
輸入“公網(wǎng)ip地址:90”, 顯示English Pal主頁面。

步驟
1. 用git clone命令下拉整個(gè)代碼倉庫。git clone http://代碼倉庫ip地址/mrlan/EnglishPal.git。
2. cd EnglishPal
3. 執(zhí)行 sudo ./build.sh
4. 打開網(wǎng)頁瀏覽器,地址欄輸入“公網(wǎng)ip地址:90”。
解釋
?腳本build.sh中的“-p 90:80”代表端口映射,將Docker容器端口80映射到外部能夠訪問的端口90。順序不能搞錯(cuò)。
確保防火墻打開了90端口。命令:sudo ufw allow 90。
確保路徑?EnglishPal/app/static/ 下面有 wordfreqapp.db、words_and_tests.p 這兩個(gè)文件。
確保路徑 EnglishPal/app/static/frequency/ 下面有 frequency.p。
遇到的問題
無法訪問“公網(wǎng)ip地址:90”,網(wǎng)頁打不開。
診斷
執(zhí)行命令 sudo docker ps, 輸出為
CONTAINER ID? ?IMAGE? ? ? ? COMMAND? ? ? ? ? ? ? ? ? CREATED? ? ? ?STATUS? ? ? ?PORTS? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NAMES
a785517d9cce? ?englishpal? ?"/entrypoint.sh /sta…"? ?2 hours ago? ?Up 2 hours? ?443/tcp, 0.0.0.0:90->80/tcp, :::90->80/tcp? ?EnglishPal
執(zhí)行命令 curl localhost:90, 有“ <title>EnglishPal 英文單詞高效記</title>”。以上兩個(gè)命令的輸出說明程序能在服務(wù)器本機(jī)運(yùn)行。
執(zhí)行命令 sudo ufw status, (部分)輸出為
To? ? ? ? ? ? ? ? ? ? ? ? ?Action? ? ? From
--? ? ? ? ? ? ? ? ? ? ? ? ?------? ? ? ----
90? ? ? ? ? ? ? ? ? ? ? ? ?ALLOW? ? ? ?Anywhere
80? ? ? ? ? ? ? ? ? ? ? ? ?ALLOW? ? ? ?Anywhere
22/tcp? ? ? ? ? ? ? ? ? ? ?ALLOW? ? ? ?Anywhere
80/tcp? ? ? ? ? ? ? ? ? ? ?ALLOW? ? ? ?Anywhere
443/tcp? ? ? ? ? ? ? ? ? ? ALLOW? ? ? ?Anywhere
解決方法
到騰訊云服務(wù)器管理頁面(https://console.cloud.tencent.com/),找到防火墻標(biāo)簽。添加一個(gè)新規(guī)則,把端口設(shè)置為80-90即可(見下圖)。

疑惑
sudo docker ps的輸出“443/tcp, 0.0.0.0:90->80/tcp, :::90->80/tcp”看起來像天書。
sudo ufw status的輸出中,80與80/tcp有啥不同?為什么不需要90/tcp?