闲社服务运行正常AI智能体自动化平台
l

本地桥接

技能标识:localhost-bridge

Bridge Docker containers to host localhost services via socat. Solves the #1 networking issue in containerized AI agent deployments: containers can't reach services bound to 127.0.0.1.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 2.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

本地桥接

localhost-bridge — 将容器连接到主机本地服务

⚠️ 安全与权限

此技能需要主机级权限。 必须由管理员审核并手动执行——绝不能由代理自动执行。

它在主机上执行的操作:

  • - 创建一个 systemd 服务(重启后持久化),将流量从 Docker 桥接 IP 转发到本地主机
  • 添加一条限定于特定 Docker 桥接接口的 UFW 防火墙规则
  • 需要 sudo、Docker 守护进程访问权限以及来自发行版官方软件包的 socat

在执行任何命令之前:

  1. 1. 检查生成的 /etc/systemd/system/socat-NETWORK>-SERVICE>-.service 文件——确认 ExecStart 仅绑定到预期的 Docker 桥接 IP(172.x.x.1),绝不能是 0.0.0.0
  2. 检查 UFW 规则——确认它针对正确的 br- 接口和端口
  3. 设置完成后,验证该端口无法从公共网络访问:curl --connect-timeout 2 http://:/ 必须失败
  4. 在广泛部署前,从容器内部进行测试

未经人工批准,不得授予自动化代理执行这些命令的权限。



问题描述

主机上的某个服务监听在 127.0.0.1(AI 网关、MCP 服务器、Ollama、数据库等)。Docker 容器需要访问该服务。容器内部的 localhost 指向容器自身,而非主机。请求要么静默超时(防火墙丢弃数据包),要么连接被拒绝。

解决方案

socat 监听 Docker 桥接网关 IP 并将流量转发到主机回环地址。结合限定范围的防火墙规则,这使容器能够访问服务,同时不会将服务暴露到外部。

设置(以管理员身份手动执行)

1. 查找 Docker 桥接网关 IP

bash

针对特定容器


docker inspect --format {{json .NetworkSettings.Networks}} \
| python3 -c
import json,sys
d = json.load(sys.stdin)
for net, info in d.items():
print(f{net}: gateway={info[\Gateway\]})

2. 创建 systemd 服务

将 IP>、、NETWORK> 和 替换为你的实际值。

命名规范: socat-network>-service>-——源网络是 Docker 网络(消费者),目标服务是主机服务。自文档化。

示例:socat-bridge-gateway-18789、socat-windmill_default-gateway-18789、socat-bridge-ollama-11434

在启用前检查 ExecStart 行——确认它仅绑定到 Docker 桥接 IP。

bash
sudo tee /etc/systemd/system/socat-NETWORK>-SERVICE>-.service > /dev/null << EOF
[Unit]
Description=Socat bridge: NETWORK> -> SERVICE>:
After=network.target docker.service

[Service]
Type=simple
ExecStart=/usr/bin/socat TCP-LISTEN:,bind=,fork,reuseaddr TCP:127.0.0.1:
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

在启用前检查文件:

cat /etc/systemd/system/socat-NETWORK>-SERVICE>-.service

sudo systemctl daemon-reload
sudo systemctl enable --now socat-NETWORK>-SERVICE>-

3. 添加防火墙规则(必须执行)

如果不添加此规则,socat 会监听,但来自容器的数据包会被静默丢弃——导致 30 秒超时且无错误信息。

在应用前检查桥接 ID——错误的 ID 可能会暴露服务。

bash

查找 Docker 网络的 Linux 桥接接口


BRIDGEID=$(docker network inspect name> --format {{.Id}} | cut -c1-12)

验证这是正确的桥接

ip link show br-${BRIDGE_ID}

仅允许该桥接接口上的流量

sudo ufw allow in on br-${BRIDGEID} to any port proto tcp comment NETWORK>--

4. 验证安全性

bash

必须成功(从容器内部)


docker exec name> curl -s --connect-timeout 5 http://IP>:/

必须失败(从公共网络)

curl --connect-timeout 2 http://:/

多网络工作节点

一个容器可以位于多个 Docker 网络上。每个网络都有自己的桥接 IP。你需要为容器使用的每个网络创建一个 socat 实例和防火墙规则。实际上,一个网络通常就足够了。

检查所有网络:docker inspect --format {{json .NetworkSettings.Networks}}

常见用例

主机服务容器客户端默认端口
AI 网关(OpenClaw、LiteLLM)工作流编排器(Windmill、n8n)18789
MCP 服务器
Docker 化代理 | 可变 | | Ollama | RAG 流水线、代理 | 11434 | | PostgreSQL | API 服务器 | 5432 | | Redis | 任何容器化应用 | 6379 |

故障排除

症状原因修复
30 秒超时,无错误防火墙丢弃数据包在桥接接口上添加 UFW 规则
连接被拒绝
socat 未运行 | systemctl status socat-NETWORK>-SERVICE>- | | 运行后因 Docker 重启停止 | 桥接 IP 已更改 | 检查新网关 IP,更新 socat 绑定 | | socat 重启后无法启动 | Docker 未就绪 | 确保单元文件中包含 After=docker.service |

替代方案

根据你的安全策略,可以考虑:

  • - Docker 主机网络(network_mode: host)——更简单,但移除了所有容器网络隔离
  • 在最小权限容器中运行 socat——避免主机级 systemd 更改
  • 配置主机服务直接绑定到 Docker 桥接 IP——无需 socat,但服务必须支持自定义绑定地址
  • host.docker.internal(Docker Desktop)——适用于 Mac/Windows,在 Linux 上不可靠

前提条件

从发行版官方软件包仓库安装 socat:

bash
sudo apt-get install -y socat # Debian/Ubuntu
sudo dnf install -y socat # Fedora/RHEL

参考资料

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 localhost-bridge-1776295935 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 localhost-bridge-1776295935 技能

通过命令行安装

skillhub install localhost-bridge-1776295935

下载

⬇ 下载 localhost-bridge v2.0.0(免费)

文件大小: 3.6 KB | 发布时间: 2026-4-16 16:03

v2.0.0 最新 2026-4-16 16:03
v2: Updated naming convention socat-source-target-port. Removed ITIL references. Set privileged false.