Mac M1 下用 Docker 跑起 CentOS 8 并开启 SSH 远程连接 封面
运维

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 那一个。

为什么不用虚拟机:Docker 容器共享宿主机内核、秒级启动、几乎不占磁盘,对“临时要个 Linux 验证一下”的场景比 VirtualBox / Parallels 轻得多。

二、拉镜像并启动容器

先拉取 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
端口怎么选:左边是 Mac 本机的端口,右边是容器里的端口。这里把容器的 22(SSH)映射到本机 22,后面才能直接用 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 提供 netstatopenssh-server 是后面 SSH 的核心。个别 32 位兼容包(如 zlib.i686libstdc++.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-*
更省心的选择:如果这是长期要用的环境,建议直接用 Rocky LinuxAlmaLinux 镜像——它们是 CentOS 8 的社区继任者,源还在维护,免得每次都先改 vault 才能装东西。

五、安装并启动 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 面板里查看容器状态、启停和日志。


相关阅读