我正在使用 ubuntu 映像在 docker 容器上的端口 26657 上运行 Tendermint HTTP RPC 服务器。
docker run -itd --name t1 -p 26657:26657 tendermint
当我在容器内执行 curl 操作时,我从 RPC 服务器获得 JSON 响应。
docker exec -it t1 curl localhost:26657/status
但是当它尝试在主机上使用 curl 操作时,我得到一个错误:“curl: (52) Empty reply from server”
curl localhost:26657/status
最初我在 Windows 机器上运行 docker。我认为 Windows 可能无法与 WSL Linux 通信(docker 在 Windows 中用于 ubuntu)可能存在一些问题。因此,我在运行 Ubuntu 20.04 的 Linux Virtual Box 中尝试了相同的命令。主机 ubuntu 仍然无法使用 curl/Web 浏览器访问容器服务器。
我尝试在容器内的端口 80 上运行 apache2 服务器并映射到端口 5000 (-p 5000:80)。这很有效,我能够在主机中的 localhost:5000 访问 apache2。当我尝试在 RPC 服务器上将 26657 映射到 5000 (-p 5000:26657) 时,会发生同样的问题。所以问题只出在容器中端口 80 以外的端口上。
我在主机上尝试了“netstat -an”,它说:“TCP 0.0.0.0:26657 0.0.0.0:0 LISTENING”。
尝试运行在 4200 上运行并映射到主机 4200 的简单 Angular 11 HTTP lite 服务器。它也无法映射此端口。
还尝试远程登录到主机上的端口 26657,并能够使用“telnet localhost 26657”成功连接。当容器终止时,telnet 无法连接,这是理想的。但仍然无法使用 curl/web 浏览器连接主机并从容器中获取 JSON 响应。
我只是尝试在 Amazon EC2 实例上运行招标 RPC 服务器。我无法使用公共 IP 访问端口 26657。我想这与 26657 端口上的协议有关。