当前位置:首页 > 服务器类 > Linux > 正文内容

Linux Docker systemctl 命令无法使用的解决方案

Codefans3年前 (2022-05-30)Linux1698

问题介绍:在 Ubuntu 20.04 的 Docker 容器中无法使用 systemctl 命令

众所周知 systemctl 可以用来启动、停止服务和查询服务状态的。

例如你可以使用 systemctl start apache2 这条命令来启动 Apache 服务。

使用 systemctl 命令时发生的错误代码

System has not been booted with systemd as init system (PID 1). Can't operate.

Failed to connect to bus: Host is down

问题出现的原因是:

0 号进程不是 init,所以导致导致缺少相关文件无法运行

Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。

再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!

因此,请遵守容器设计原则,一个容器里运行一个前台服务!

解决方法1:

解决这个问题的两个步骤(不推荐)

第一步:在创建 docker 容器的时候需要多增加一个参数 --privileged

即docker run --privileged -p xxxx:22 --name CONTAINER_NAME -itd CONTAINER_IMAGE_NAME

第二步:执行 /bin/bash 命令并进入容器

docker exec -it CONTAINER_NAME /bin/bash

解决方法2:

不用 systemctl 如何开启、停止或查看服务的运行状态呢?(推荐)

在绝对路径 /etc/init.d/ 下,存放了许多带执行权限的服务文件,如 apache2,ssh 等

于是我们可以直接使用这些文件用来开启、停止或查看服务的运行状态

这些服务文件有许多功能 {start|stop|reload|force-reload|restart|try-restart|status}

例如我需要查看 apache 服务的状态,输入 /etc/init.d/apache2 status,执行后就会返回 * apache is running

扫描二维码推送至手机访问。

版权声明:本文由图慧网发布,如需转载请注明出处。

本文链接:http://www.tuh8.com/?id=34

分享给朋友:

“Linux Docker systemctl 命令无法使用的解决方案” 的相关文章

docker不能正常使用cron任务

基于centos7的docker不能正常使用cron任务问题修改docker centos7镜像对应的容器的/etc/pam.d/crond文件把required 修改成sufficient,如下:account    sufficient &nbs...

使用Mysqldump命令备份和恢复Mysql数据库

之前一直习惯用phpmyadmin备份恢复数据库,不过数据库文件大了用phpmyadmin就不行了。这时候我们就需要Mysqldump来备份和恢复。以下内容来自网络。1、导出命令:mysqldump -u用户名 -p数据库密码 数据库名 > 文件名如果用户名需要密码,则需要在此命令执行后输入一...

Docker容器里的centos、unbuntu无法使用 systemctl 命令的解决方案

据说在 Linux Docker中无法使用 systemd(systemctl) 相关命令的原因是 1号进程不是 init ,而是其他例如 /bin/bash ,所以导致缺少相关文件无法运行。(System has not been booted with systemd as init syste...

bitwarden实现及踩坑记录

bitwarden 搭建背景免费用户LastPass目前只能在一个设备上登陆,所以迁移到bitwarden。bitwarden是开源的跨平台密码管理软件。搭建后可以有全部功能具体流传步骤前置条件:安装dockerbitwarden只支持Https,所以VPS需要有域名、开放80 、443端口。由于使...

Jupyter hub解决了中文乱码问题,JupyterHub

问题在使用matplotlib绘图时,会出现中文变成方框的问题解决方法找到服务器上jupyter hub中字体存放的路径import matplotlib     print(matplotlib.matplotlib_fname())2. 登陆Ju...