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

含systemd的Docker镜像生成/run/nologin,如何阻止其自动重建?

Docker中Ubuntu+systemd重启后自动生成/run/nologin的问题

这是systemd的设计特性,不是bug

/run/nologin是systemd的标准机制:当它检测到系统处于初始化未完成的状态时(比如容器这种每次启动都从头初始化的轻量环境),就会创建这个文件,用来阻止用户登录,避免系统还没准备好时出现登录异常。容器每次重启都会触发systemd的初始化流程,所以这个文件会反复被重建。

阻止/run/nologin自动生成的方法

方法1:禁用systemd-firstboot.service(推荐)

从根源上解决,直接禁用触发初始化逻辑的systemd-firstboot.service,让systemd跳过首次初始化步骤,就不会生成nologin文件了。修改你的Dockerfile:

FROM ubuntu:jammy

RUN apt-get update ; \
    apt-get install -y systemd systemd-sysv ; \
    apt-get clean ; \
    # 禁用systemd-firstboot服务,跳过首次初始化
    systemctl mask systemd-firstboot.service ; \
    # ...你的其他清理rm命令...
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/lib/systemd/systemd"] 

方法2:添加启动自动删除nologin的自定义服务

如果不想改动默认systemd服务,可以创建一个自定义服务,在系统启动后自动删掉/run/nologin:

FROM ubuntu:jammy

RUN apt-get update ; \
    apt-get install -y systemd systemd-sysv ; \
    apt-get clean ; \
    # 创建自定义服务文件
    mkdir -p /etc/systemd/system/remove-nologin.service ; \
    cat > /etc/systemd/system/remove-nologin.service <<EOF
[Unit]
Description=自动删除/run/nologin
After=sysinit.target

[Service]
Type=oneshot
ExecStart=/bin/rm -f /run/nologin

[Install]
WantedBy=multi-user.target
EOF
    # 启用该服务
    systemctl enable remove-nologin.service ; \
    # ...你的其他清理rm命令...
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/lib/systemd/systemd"] 

方法3:启动容器时临时删除(仅临时测试用)

如果只是临时验证效果,可以在启动命令中加入删除操作,但每次启动都要加,不够持久:

docker run --privileged --name my_container -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro my_image /bin/sh -c "rm -f /run/nologin && /lib/systemd/systemd"

内容的提问来源于stack exchange,提问作者g.pickardou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:47:41