用Docker在腾讯云部署网页应用English Pal
期望效果
输入“公网ip地址:90”, 显示English Pal主页面。

步骤
1. 用git clone命令下拉整个代码仓库。git clone http://代码仓库ip地址/mrlan/EnglishPal.git。
2. cd EnglishPal
3. 执行 sudo ./build.sh
4. 打开网页浏览器,地址栏输入“公网ip地址:90”。
解释
脚本build.sh中的“-p 90:80”代表端口映射,将Docker容器端口80映射到外部能够访问的端口90。顺序不能搞错。
确保防火墙打开了90端口。命令:sudo ufw allow 90。
确保路径 EnglishPal/app/static/ 下面有 wordfreqapp.db、words_and_tests.p 这两个文件。
确保路径 EnglishPal/app/static/frequency/ 下面有 frequency.p。
遇到的问题
无法访问“公网ip地址:90”,网页打不开。
诊断
执行命令 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
执行命令 curl localhost:90, 有“ <title>EnglishPal 英文单词高效记</title>”。以上两个命令的输出说明程序能在服务器本机运行。
执行命令 sudo ufw status, (部分)输出为
To Action From
-- ------ ----
90 ALLOW Anywhere
80 ALLOW Anywhere
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
解决方法
到腾讯云服务器管理页面(https://console.cloud.tencent.com/),找到防火墙标签。添加一个新规则,把端口设置为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?