Mac M1 下用 Docker 跑起 CentOS 8 并开启 SSH 远程连接
想在 macOS 上临时有个 Linux 环境,又不想开虚拟机?用 Docker 起一个 CentOS 8 容器,再把 SSH 服务跑起来,就能像连接一台真机一样用终端远程登录。这篇记的是在 Apple Silicon(M1/M2)Mac 上从零跑通的全过程。
一、先确认 Docker 已经在跑
Docker 在 Mac 上是一个桌面应用,容器都跑在它内置的轻量虚拟机里。开始前先打开 Docker Desktop,确认菜单栏小鲸鱼图标没有报错、状态是 running。如果还没装,去 官网 下载 Apple Silicon 版安装即可。注意别下成 Intel 版,M 系列芯片要选 arm64 那一个。
二、拉镜像并启动容器
先拉取 CentOS 8 的官方镜像,并确认拉取成功:
docker pull centos:centos8
docker images # 检查本地镜像列表里有没有 centos8
启动容器时有两个关键参数:-p 宿主机端口:容器端口 做端口映射;--privileged 配合 /usr/sbin/init 让容器里能跑 systemd(SSH 这类服务依赖它):
docker run -d -p 22:22 -p 3306:3306 -p 80:80 \
--name centos8 --privileged=true \
centos:centos8 /usr/sbin/init
ssh root@localhost 连。如果本机 22 被占,改成 -p 2222:22,连接时就要写 -p 2222。三、进入容器、装常用工具
进容器终端(-it 表示交互模式,退出不会关掉容器):
docker exec -it centos8 /bin/bash
换源之后(见下一步),安装一批常用工具:
yum install -y openssh-server vim lrzsz wget gcc-c++ \
pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel \
patch bash-completion lsof unzip zip net-tools
其中 net-tools 提供 netstat,openssh-server 是后面 SSH 的核心。个别 32 位兼容包(如 zlib.i686、libstdc++.i686)可能提示找不到,跳过即可,不影响主线。
四、CentOS 8 源已失效,先换 vault 源
CentOS 8 官方在 2021 年底停止维护,默认 mirror 源已经 404,yum 会报 Failed to download metadata for repo 'appstream'。把源指向仍保留旧包的 vault.centos.org 即可:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
五、安装并启动 SSH
yum install -y openssh-server initscripts
ssh-keygen -A # 生成主机密钥,否则 sshd 起不来
systemctl start sshd # 或 service sshd restart
netstat -antp | grep sshd # 确认 22 端口已在监听
如果 systemctl 提示不可用,用 service sshd restart。看到 sshd 监听在 0.0.0.0:22 就说明服务起来了。
六、允许密码登录并设置 root 密码
旧版 CentOS 需要编辑 /etc/ssh/sshd_config,把 #PermitRootLogin 改成 PermitRootLogin yes、并确认 PasswordAuthentication yes,改完 systemctl restart sshd。CentOS 8 默认通常已经允许密码登录,可先跳过这步,连不通再回来改。
给 root 设个密码(CentOS 8 最小镜像里可能没有 passwd 命令,先装):
yum install -y passwd
passwd root # 输入两次新密码
七、从本机 SSH 连进去
回到 Mac 终端,直接连本机映射出来的 22 端口:
ssh root@localhost -p 22
# localhost 也可换成 127.0.0.1 或本机 IP;若前面映射的是 2222,则写 -p 2222
输入刚才设的密码,能进去就说明整条链路通了。接下来就能像用一台普通 Linux 服务器一样,在里面装软件、跑服务、做验证了。
日常管理
查看容器配置:docker inspect centos8。以前的图形化管理工具 Kitematic 已经停止维护,现在更推荐直接用 docker 命令,或在 Docker Desktop 面板里查看容器状态、启停和日志。