微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将端口 80 以外的 docker 容器端口暴露给主机

如何解决无法将端口 80 以外的 docker 容器端口暴露给主机

我正在使用 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 上运行一个简单的 Angular 11 HTTP lite 服务器并映射到主机 4200。它也无法映射此端口。

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

我只是尝试在 Amazon EC2 实例上运行 Tendermint RPC 服务器。我无法使用公共 IP 访问端口 26657。估计跟26657端口的协议有关。

解决方法

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

curl 本地主机: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"
    }
  }
}

它适用于我的带有 wsl2 + ubuntu 20.04 的 Windows 10 机器..

,

我在无法从外部访问的“localhost”上运行 Tendermint RPC 服务器。我应该在 0.0.0.0 上启动服务器

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?