直接用ssh连docker容器需手动配置:先映射宿主机端口(如-p 5000:22)并启用特权模式,再进容器安装openssh-server、设置root密码、修改sshd_config允许root登录和密码认证,最后启动sshd服务并通过宿主机ip+映射端口远程连接。

直接用 SSH 连 Docker 容器不是默认支持的,因为官方镜像通常不预装 SSH 服务。要实现远程 SSH 连接,核心是:在容器内安装并运行 sshd,正确配置登录方式,并通过端口映射暴露服务到宿主机。
1. 启动容器时做好端口映射和权限准备
SSH 默认走 22 端口,需将容器 22 端口映射到宿主机一个可用端口(如 5000、2222 等):
- 使用
-p 宿主机端口:22显式映射,例如:docker run -d -p 5000:22 --name mycentos centos:7 /usr/sbin/init - 推荐加
--privileged=true或至少--cap-add=SYS_ADMIN,确保容器内能正常启动 systemd 或 sshd 服务(尤其 CentOS/Alpine 等) - 避免用
--net=host,否则端口映射失效,且失去网络隔离性
2. 进入容器安装并配置 OpenSSH
以 CentOS/Ubuntu 为例(命令略有差异):
-
安装服务:CentOS 执行
yum install -y openssh-server;Ubuntu 执行apt update && apt install -y openssh-server -
创建运行目录:
mkdir -p /var/run/sshd(否则 sshd 启动失败) -
设置 root 密码:
echo 'root:yourpass' | chpasswd(或交互式执行passwd root) -
修改配置:编辑
/etc/ssh/sshd_config,确保以下行未被注释且值为 yes:PermitRootLogin yesPasswordAuthentication yes
(如需密钥登录,可额外配置AuthorizedKeysFile并放入公钥)
3. 启动 SSH 服务并验证监听
不同基础镜像启动方式不同:
- CentOS 7+(使用 systemd):
systemctl enable sshd && systemctl start sshd - Ubuntu/Debian(无 systemd):
/usr/sbin/sshd -D(前台运行,适合 docker run 启动)或service ssh start - 验证是否监听:
netstat -tlnp | grep :22或ss -tlnp | grep :22
4. 从外部主机连接容器
只要宿主机防火墙放行对应端口,即可用标准 SSH 客户端连接:
- 终端直连:
ssh -p 5000 root@宿主机IP(输入上一步设的密码) - VS Code Remote-SSH:在
~/.ssh/config中添加:Host my-docker HostName 宿主机IP Port 5000 User root然后通过 Remote-SSH 插件选择my-docker连接 - 注意:容器 IP(如 172.17.0.x)对外不可达,必须通过宿主机 IP + 映射端口访问











