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 updateca-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)
  • 复盘
    1. 用户不存在:官方镜像默认只有 root,不存在 dev 用户,需手动创建。
    2. 配置限制:Ubuntu 默认禁止 root 用户通过密码远程登录。
  • 终极配置:修改 /etc/ssh/sshd_config,确保以下两行生效:
    • PermitRootLogin yes
    • PasswordAuthentication 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年前端感悟)

  1. Windows 与 Linux 的管道差异:在 CMD 里直接使用 | grep 会报错,必须用 bash -c "..." 将整串命令交给容器处理,或者改用 Windows 的 findstr
  2. 容器隔离性:容器里的 root 是安全的沙箱环境,在本地调试阶段,直接用 root 登录能省去大量 sudo 权限带来的配置麻烦。
  3. 持久化意识:折腾完这一套后,务必执行 docker commit 提交为新镜像,避免容器删除后“一夜回到解放前”。

结语:搞定 SSH 只是第一步,打通了本地 IDE 与容器的连接,后续无论是跑 Node.js 服务还是做自动化部署,效率都会提升一个量级。

posted @ 2026-04-22 17:36  踏浪小鲨鱼  阅读(47)  评论(0)    收藏  举报