You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Docker容器内部访问主机上AWS SSM端口转发的服务

根因分析

默认情况下SSM端口转发会话仅绑定主机的127.0.0.1回环地址,仅能接收主机本地进程发起的请求。Docker容器访问172.17.0.1的流量来源于docker网桥,不属于本地回环地址的请求范围,因此会被拒绝,表现为端口未开放。

解决方案
  • 方案1:修改SSM端口转发的绑定地址(最直接)
    启动SSM会话时新增localAddress参数,指定监听所有网卡地址0.0.0.0,示例命令如下:
aws ssm start-session \
  --target <EC2实例ID> \
  --document-name AWS-StartPortForwardingSession \
  --parameters "portNumber=[<目标服务远程端口>],localPortNumber=[<本地监听端口>],localAddress=[0.0.0.0]"

配置完成后SSM会监听主机所有网卡的对应端口,Docker容器通过172.17.0.1:<端口>即可正常访问。

注意:如果主机直接暴露在公网,使用该方案时建议搭配防火墙规则,仅允许信任IP段访问SSM监听端口,避免资源泄露。

  • 方案2:本地端口转发(更安全,仅开放给Docker网络)
    如果不想将SSM端口暴露到公网,可通过socat工具仅在Docker网关地址上做一层转发:
  1. 主机上安装socat:apt install socat(Debian/Ubuntu)或yum install socat(CentOS/RHEL)
  2. 运行转发命令:
socat TCP-LISTEN:<本地端口>,bind=172.17.0.1,fork TCP:127.0.0.1:<SSM本地监听端口>

该方案仅允许Docker网络内的请求访问SSM转发端口,不会暴露到外部网络。

  • 方案3:容器使用host网络模式
    启动容器时指定--net=host参数,容器将直接复用主机的网络栈,直接通过localhost:<SSM监听端口>即可访问资源,无需调整SSM配置。该方案适合开发测试环境使用,生产环境需评估网络隔离需求。
验证步骤

配置完成后可先在主机上执行ss -tulpn | grep <监听端口>,确认对应端口的监听地址为0.0.0.0或172.17.0.1即可。如果仍无法访问,需检查主机防火墙(iptables/ufw)是否允许Docker网桥的流量访问对应端口。

内容的提问来源于stack exchange,提问作者Maximilian Speicher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:18:05