You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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管理服务,需调整容器启动参数:

  1. 重新启动容器并指定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正常运行的必要条件。
  2. 在容器内安装并启用sshd:
    dnf install -y openssh-server
    systemctl enable --now sshd
    
  3. 设置root用户密码:
    passwd root
    

容器IP地址配置

  • 默认状态下,容器会自动获取Docker桥接网络的IP,可通过ip addr命令查看。
  • 若需自定义固定IP,先创建自定义Docker网络:
    docker network create --subnet=172.18.0.0/16 my-custom-net
    
    启动容器时指定IP:
    # 对应方案一的启动命令
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:27:15