问题背景
下载training/webapp后,运行该容器默认会打开一个5000端口的helloworld示例Web工程。
想将该默认5000端口映射至主机的 6666端口,发现外网无法访问该端口。其他端口(比如6655或者8888)等均可正常访问
先记录下问题,以后有机会再详细看下。
[root@miniserver ~]# docker pull training/webapp
Using default tag: latest
latest: Pulling from training/webapp
Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
docker.io/training/webapp:latest
[root@miniserver ~]#
[root@miniserver ~]# docker run -d -p 6655:5000 training/webapp python app.py # 将容器的5000端口映射至host的6655端口
78dd53fcc94d23b696189ea38436537d8d0da21389cea20f1102a43efb092cb2
[root@miniserver ~]#
[root@miniserver ~]# docker run -d -p 6666:5000 training/webapp python app.py
bf30c05ae9c1eb29d2c696e791a7fe2682ebe9c379cdcc827c86ce939125d9bd
[root@miniserver ~]#
[root@miniserver ~]# docker run -d -p 8888:5000 training/webapp python app.py
9a3b04b0f29ceb8e527100cf71b3a8edbec2f566c12af2ba86842733b21f9a1a
[root@miniserver ~]#
[root@miniserver ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a3b04b0f29c training/webapp "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:8888->5000/tcp, :::8888->5000/tcp exciting_wing
bf30c05ae9c1 training/webapp "python app.py" 14 seconds ago Up 14 seconds 0.0.0.0:6666->5000/tcp, :::6666->5000/tcp modest_kepler
78dd53fcc94d training/webapp "python app.py" 19 seconds ago Up 18 seconds 0.0.0.0:6655->5000/tcp, :::6655->5000/tcp cranky_keller
[root@miniserver ~]#
通过命令查看,主机的6666端口确定已经打开了
[root@miniserver ~]# netstat -anp | grep 6666
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN 12504/docker-proxy
tcp6 0 0 :::6666 :::* LISTEN 12510/docker-proxy
[root@miniserver ~]# netstat -anp | grep 6655
tcp 0 0 0.0.0.0:6655 0.0.0.0:* LISTEN 12408/docker-proxy
tcp6 0 0 :::6655 :::* LISTEN 12414/docker-proxy
[root@miniserver ~]# netstat -anp | grep 8888
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 12600/docker-proxy
tcp6 0 0 :::8888 :::* LISTEN 12607/docker-proxy
[root@miniserver ~]#
docker 主机的ip地址信息
[root@miniserver ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:c0ff:fe93:4839 prefixlen 64 scopeid 0x20<link>
ether 02:42:c0:93:48:39 txqueuelen 0 (Ethernet)
RX packets 420 bytes 27016 (26.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 446 bytes 47474 (46.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.176.129 netmask 255.255.255.0 broadcast 192.168.176.255
inet6 fe80::3914:8e0f:c1e6:d651 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:01:7c:fe txqueuelen 1000 (Ethernet)
RX packets 7078 bytes 591406 (577.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6223 bytes 1191126 (1.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
无法访问6666端口的问题web截图如下:

问题原因
测试环境使用的是Google Chrome浏览器,由上图,可以看到Chrome提示了ERR_UNSAFE_PORT错误,在网上搜索了下,发现Chrome浏览器有默认非安全端口列表,搭建网站要建议尽量避免以下端口。
默认非安全端口列表如下:
1, // tcpmux
7, // echo
9, // discard
11, // systat
13, // daytime
15, // netstat
17, // qotd
19, // chargen
20, // ftp data
21, // ftp access
22, // ssh
23, // telnet
25, // smtp
37, // time
42, // name
43, // nicname
53, // domain
77, // priv-rjs
79, // finger
87, // ttylink
95, // supdup
101, // hostriame
102, // iso-tsap
103, // gppitnp
104, // acr-nema
109, // pop2
110, // pop3
111, // sunrpc
113, // auth
115, // sftp
117, // uucp-path
119, // nntp
123, // NTP
135, // loc-srv /epmap
139, // netbios
143, // imap2
179, // BGP
389, // ldap
465, // smtp+ssl
512, // print / exec
513, // login
514, // shell
515, // printer
526, // tempo
530, // courier
531, // chat
532, // netnews
540, // uucp
556, // remotefs
563, // nntp+ssl
587, // stmp?
601, // ??
636, // ldap+ssl
993, // ldap+ssl
995, // pop3+ssl
2049, // nfs
3659, // apple-sasl / PasswordServer
4045, // lockd
6000, // X11
6665, // Alternate IRC [Apple addition]
6666, // Alternate IRC [Apple addition]
6667, // Standard IRC [Apple addition]
6668, // Alternate IRC [Apple addition]
6669, // Alternate IRC [Apple addition]
如果一定要使用上述端口的解决办法
选中Google Chrome 快捷方式,右键属性,在”目标”对应文本框添加:
–explicitly-allowed-ports=87,6666,556,6667
- 不过6666端口无法访问的问题,在IE浏览器中不存在,可正常访问。

博客讲述了在Docker环境下,尝试将webapp容器的5000端口映射到主机的6666端口时遇到的问题。虽然端口映射成功,但通过Google Chrome浏览器访问时出现ERR_UNSAFE_PORT错误,而使用IE浏览器则可以正常访问。问题的原因是Chrome浏览器限制了部分端口作为安全原因。解决方案是修改Chrome启动参数,允许指定端口。此外,文章还提到了其他可正常访问的端口如6655和8888。
2955

被折叠的 条评论
为什么被折叠?



