Docker 搭建 Ubuntu SSH 开发环境踩坑全纪实
实战记录:Docker 搭建 Ubuntu SSH 开发环境踩坑全纪实
1. 背景
为了实现更灵活的开发环境隔离(如 Nuxt 4 全栈开发),我尝试在 Docker 中启动一个 Ubuntu 24.04 容器,并配置 SSH 服务,以便通过本地终端或 VS Code 远程连接。
2. 核心踩坑与解决方案
坑位一:软件源与 SSL 证书(先有鸡还是先有蛋)
- 现象:默认官方源极慢,执行
apt install报错Unable to locate package。 - 解决:将源修改为阿里云。
- 次生问题:改用
https源后报错Certificate verification failed(镜像太纯净,没有根证书无法验证阿里云)。 - 绕路技巧:先将
https降级改回http,顺利完成apt update和ca-certificates安装后,再切回加密连接。
坑位二:tzdata 时区选择卡死
- 现象:安装过程中弹出 Geographic area 选择菜单,在
docker exec非交互终端下无法正常操作。 - 解决:在命令前加上环境变量
DEBIAN_FRONTEND=noninteractive,强制开启“静默模式”,并手动建立时区软链接:
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
坑位三:SSH 权限封锁(Permission denied)
- 现象:密码正确,但连接时一直提示
Permission denied (publickey,password)。 - 复盘:
- 用户不存在:官方镜像默认只有
root,不存在dev用户,需手动创建。 - 配置限制:Ubuntu 默认禁止
root用户通过密码远程登录。
- 用户不存在:官方镜像默认只有
- 终极配置:修改
/etc/ssh/sshd_config,确保以下两行生效:PermitRootLogin yesPasswordAuthentication yes
3. 核心命令复盘 (Windows CMD 视角)
| 阶段 | 关键命令 |
|---|---|
| 重置密码 | docker exec -it ssh-ubuntu passwd root |
| 修改配置 | docker exec ssh-ubuntu bash -c "echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config" |
| 重启服务 | docker exec ssh-ubuntu service ssh restart |
| 端口检查 | docker exec ssh-ubuntu bash -c "netstat -tunlp | grep :22" |
| SSH 连接 | ssh root@127.0.0.1 -p 2222 |
4. 开发者心得(6年前端感悟)
- Windows 与 Linux 的管道差异:在 CMD 里直接使用
| grep会报错,必须用bash -c "..."将整串命令交给容器处理,或者改用 Windows 的findstr。 - 容器隔离性:容器里的
root是安全的沙箱环境,在本地调试阶段,直接用root登录能省去大量sudo权限带来的配置麻烦。 - 持久化意识:折腾完这一套后,务必执行
docker commit提交为新镜像,避免容器删除后“一夜回到解放前”。
结语:搞定 SSH 只是第一步,打通了本地 IDE 与容器的连接,后续无论是跑 Node.js 服务还是做自动化部署,效率都会提升一个量级。

浙公网安备 33010602011771号