Ubuntu下Docker容器内访问宿主机localhost:9208的Elasticsearch失败求助
解决方案
要在Ubuntu 22.04的Docker容器内访问宿主机SSH隧道映射的Elasticsearch实例,需完成以下两步:
1. 调整SSH隧道的本地绑定地址
默认情况下,SSH隧道的本地端口仅绑定宿主机的127.0.0.1,这意味着只有宿主机自身能访问该端口,容器无法通过宿主机内网IP连接。
修改你的SSH隧道命令,将本地绑定地址改为0.0.0.0(监听宿主机所有网络接口):
ssh -L 0.0.0.0:9208:<远程Elasticsearch地址>:9200 <SSH用户名>@<远程服务器地址>
2. 修改docker-compose.yml配置
通过extra_hosts将host.docker.internal映射到宿主机的网关IP,然后在容器内使用该地址访问端口:
version: '3' services: curl_test: image: curlimages/curl extra_hosts: - "host.docker.internal:host-gateway" command: "curl http://host.docker.internal:9208"
替代方案:直接使用宿主机内网IP
如果你知道宿主机的内网IP(例如192.168.1.100),也可以直接在命令中指定该IP,无需配置extra_hosts:
version: '3' services: curl_test: image: curlimages/curl command: "curl http://192.168.1.100:9208"
为什么之前的方法无效?
host.docker.internal:host-gateway方案:之前隧道仅绑定127.0.0.1,容器通过host.docker.internal访问的是宿主机内网IP,但该IP上的9208端口未被监听,导致连接拒绝。- 直接映射9208端口到容器:端口映射是将容器端口暴露给宿主机,而非让容器访问宿主机的端口,因此容器内的
localhost仍指向自身,无法访问宿主机的隧道端口。
内容的提问来源于stack exchange,提问作者Wackamie
相关产品推荐
相关产品推荐

