远程主机Docker容器无法跨主机SSH访问问题求助
检查Docker端口映射配置
执行docker ps查看容器的PORTS列,确认是否将容器的SSH端口(默认22)映射到Host A的公网可达端口,比如是否存在0.0.0.0:2222->22/tcp这类配置。若未做端口映射,其他主机无法直接访问容器私有网络内的端口,需重新启动容器并添加-p 宿主机端口:22参数,示例:docker run -d -p 2222:22 镜像名。验证容器网络模式
若容器使用--network host模式,会直接复用Host A的网络栈,此时SSH端口即为Host A的对应端口(默认22),需确认该端口可被其他主机访问;若为默认bridge模式,则必须通过端口映射实现跨主机访问。检查容器内SSH服务监听配置
进入容器执行docker exec -it 容器名 bash,查看/etc/ssh/sshd_config中的ListenAddress配置,确保其值为0.0.0.0而非127.0.0.1。若仅监听本地回环地址,仅容器内部和Host A本地可连接,修改后重启SSH服务:service ssh restart或systemctl restart sshd。确认Host A的IP转发功能
执行sysctl net.ipv4.ip_forward,若输出为net.ipv4.ip_forward = 0,说明IP转发未开启,临时开启可执行sysctl -w net.ipv4.ip_forward=1,永久开启需编辑/etc/sysctl.conf,将net.ipv4.ip_forward设为1后执行sysctl -p生效。测试跨主机网络与端口可达性
在Host B上ping Host A的IP,确认基础网络连通性;若ping通,再用telnet HostA_IP 映射端口或nc -zv HostA_IP 映射端口测试端口是否可访问,比如telnet 192.168.1.100 2222。若端口连接失败,检查Host A的iptables规则(iptables -L -n),确认无拦截转发的规则。
内容的提问来源于stack exchange,提问作者Hoa Pham

