如何从Docker容器访问OSX(Mac)主机暴露的端口服务
解决方案
步骤1:修改私有以太坊节点的监听配置
你当前以太坊节点默认仅绑定127.0.0.1回环地址,仅允许本地进程访问,Docker容器发起的请求属于外部访问会被直接拒绝。启动节点时添加以下参数即可放开监听:
- 如果你使用Geth 1.10+版本:添加
--http.addr 0.0.0.0参数,同时可以按需添加--http.vhosts="*"避免虚拟主机校验拦截 - 如果你使用旧版Geth:添加
--rpcaddr 0.0.0.0参数
步骤2:配置Docker容器的宿主机映射
如果host.docker.internal默认解析失败,可以手动在docker-compose中添加hosts映射规则,无需手动填写固定IP:
version: '3' services: jenkins: extra_hosts: - "host.docker.internal:host-gateway"
该配置会自动适配Mac系统的Docker网络,将域名映射到宿主机对应的网关地址。
步骤3:放行Mac系统防火墙端口
Mac系统默认防火墙会拦截外部请求访问8545端口,按以下路径操作放行:系统设置 > 网络 > 防火墙 > 选项,找到你运行以太坊节点的程序,勾选允许传入连接,也可以临时关闭防火墙做连通性验证。
效果验证
配置完成后重启容器和以太坊节点,再次执行测试代码即可返回True:
from web3 import Web3 w3 = Web3(Web3.HTTPProvider('http://host.docker.internal:8545')) print(w3.isConnected())
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

