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

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

Codefans3年前 (2022-05-30)Linux1765

问题介绍:在 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...

Ubuntu下几种格式的安装包安装方法

1. .deb格式双击打开直接安装。在新版本ubuntu中由于移除啦ubuntu软件中心,并替换成Gnome软件(又改名为ubuntu软件),导致无法直接安装,可使用下面的命令安装(假设安装包位于/home/a1eafall)$sudo dpkg -i /home/a1...

如何备份和还原Docker容器?

Docker使我们能够自动化构建和部署应用程序的过程。它还允许我们创建一个打包的环境来运行该应用程序,从而使其易于移植且轻巧,同时还可以跟踪版本。所有这些都可以通过Docker容器实现。它有助于使应用程序平台独立。假设我们的计算机中运行着一个docker容器,我们想要对该容器进行快照或保留该容器的备...

详解 docker save 与 docker export 的区别

详解 docker save 与 docker export 的区别

缘起docker save和docker export都能导出镜像包,咋看起来区别似乎不大。本文就针对这个问题,试图搞清楚docker save和docker export的功能是什么?适用于什么应用场景?本文的测试的Docker版本如下,不保证所有版本的docker都能重现本文的结果。&...

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

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

ubuntu打包/解包tar命令格式

打包/解包tar是Linux中常用的备份工具,此命令可以把一系列文件打包成一个大的文件,也可以把一个打包的大文件恢复成一系列文件。tar命令格式如下:#打包文件tar -cvf 打包文件.tar 被打包文件/路径#解包文件tar -xvf 打包文文件.tartar选项说明选项c 生成档案文件,创建打...