无法将端口 80 以外的 docker 容器端口公开给主机

Unable to expose docker container port other than port 80 to host

我正在 运行 使用 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) 来自服务器的空回复”

curl localhost:26657/status

最初我在 Windows 机器上 运行ning docker。我认为 windows 可能存在一些问题,无法与 WSL Linux 通信(docker 在 Windows 中用于 ubuntu)。因此,我在 Linux Virtual Box 运行ning Ubuntu 20.04 中尝试了相同的命令。主机 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 上 运行ning 一个简单的 Angular 11 HTTP lite 服务器 运行ning 并映射到主机 4200。它也无法映射此端口。

还尝试远程登录到主机上的端口 26657,并且能够使用“telnet localhost 26657”成功连接。当容器终止时,telnet 无法连接,这是理想情况。但仍然无法使用 curl/web 浏览器连接主机并从容器获得 JSON 响应。

我刚刚尝试 运行 Amazon EC2 实例上的 tendermint RPC 服务器。我无法使用 public IP 访问端口 26657。估计跟26657端口的协议有关系。

尝试 运行 这个 docker 运行 -itd --name t1 -p 26657:26657 tendermint/tendermint

卷曲localhost:26657/状态

{
  "jsonrpc": "2.0",
  "id": -1,
  "result": {
    "node_info": {
      "protocol_version": {
        "p2p": "8",
        "block": "11",
        "app": "1"
      },
      "id": "e0d34bb67c18d9025f6944de285f24e904de8c23",
      "listen_addr": "tcp://0.0.0.0:26656",
      "network": "dockerchain",
      "version": "",
      "channels": "40202111433038606100",
      "moniker": "dockernode",
      "other": {
        "tx_index": "on",
        "rpc_address": "tcp://0.0.0.0:26657"
      }
    },
    "sync_info": {
      "latest_block_hash": "5E59DCD523F574AA5B3961A9523B660716FDF9A3D90C72294285106E99614F18",
      "latest_app_hash": "0000000000000000",
      "latest_block_height": "170",
      "latest_block_time": "2021-05-16T12:08:26.1797685Z",
      "earliest_block_hash": "746D1580F6B7012D042230791CCED002AC327422D144BEE7BC2B203E1ECD6F39",
      "earliest_app_hash": "",
      "earliest_block_height": "1",
      "earliest_block_time": "2021-05-16T12:06:43.2085282Z",
      "catching_up": false
    },
    "validator_info": {
      "address": "ACC91433A4B84C4A53547A58418001CD55677F28",
      "pub_key": {
        "type": "tendermint/PubKeyEd12519",
        "value": "+hGKJ2w6dRevN0t2OEf/1uHoInggirrSHCDzyhwJuOo="
      },
      "voting_power": "10"
    }
  }
}

它可以在我的 windows 10 机器上使用 wsl2 + ubuntu 20.04..

我是 运行 无法从外部访问的“本地主机”上的 Tendermint RPC 服务器。我应该在 0.0.0.0

上启动服务器