Docker AlmaLinux容器SSH启用及systemctl失效问题求助
解决AlmaLinux容器中无法使用systemctl及启用SSH服务的问题
问题原因
默认启动的AlmaLinux容器未将systemd作为PID 1进程运行,而systemctl命令依赖systemd服务管理器,因此无法正常使用。
解决方案一:直接启动sshd(无需systemd)
这种方式更贴合容器单进程运行的设计逻辑:
- 安装openssh-server:
dnf install -y openssh-server - 生成SSH服务所需密钥文件:
ssh-keygen -A - 设置root用户密码(否则无法通过SSH登录容器):
passwd root - (可选)修改sshd配置允许root登录:
编辑/etc/ssh/sshd_config文件,确保PermitRootLogin设置为yes(默认值可能为prohibit-password,需手动调整)。 - 前台启动sshd(保持容器持续运行):
/usr/sbin/sshd -D
完成后即可在宿主机执行ssh root@localhost -p 10022登录容器。
解决方案二:让容器以systemd作为PID 1运行
如果必须使用systemctl管理服务,需调整容器启动参数:
- 重新启动容器并指定systemd作为初始化进程:
其中docker run -it --name ssh-test --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 10022:22 almalinux/9-base /sbin/init--privileged权限和挂载cgroup目录是systemd正常运行的必要条件。 - 在容器内安装并启用sshd:
dnf install -y openssh-server systemctl enable --now sshd - 设置root用户密码:
passwd root
容器IP地址配置
- 默认状态下,容器会自动获取Docker桥接网络的IP,可通过
ip addr命令查看。 - 若需自定义固定IP,先创建自定义Docker网络:
启动容器时指定IP:docker network create --subnet=172.18.0.0/16 my-custom-net# 对应方案一的启动命令 docker run -it --name ssh-test --net my-custom-net --ip 172.18.0.10 -p 10022:22 almalinux/9-base # 对应方案二的启动命令 docker run -it --name ssh-test --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --net my-custom-net --ip 172.18.0.10 -p 10022:22 almalinux/9-base /sbin/init
内容的提问来源于stack exchange,提问作者icebowl
相关产品推荐
相关产品推荐

