Centos 码头指示灯中心7:'/bin/sh-c系统控制启动httpd.service';返回了一个非零代码:1

Centos 码头指示灯中心7:'/bin/sh-c系统控制启动httpd.service';返回了一个非零代码:1,centos,docker,lamp,devops,Centos,Docker,Lamp,Devops,我开始使用docker来自动化环境,然后我尝试构建一个简单的LAMP,因此Dockerfile如下所示: 来自centos:7 环境容器=码头工人 运行yum-y swap--删除systemd container systemd container libs--安装systemd systemd libs 运行yum-y更新;百胜全洁\ (cd/lib/systemd/system/sysinit.target.wants/;for i in*;do[$i==systemd-tmpfiles-

我开始使用
docker
来自动化环境,然后我尝试构建一个简单的
LAMP
,因此
Dockerfile
如下所示:

来自centos:7
环境容器=码头工人
运行yum-y swap--删除systemd container systemd container libs--安装systemd systemd libs
运行yum-y更新;百胜全洁\
(cd/lib/systemd/system/sysinit.target.wants/;for i in*;do[$i==systemd-tmpfiles-setup.service]| | rm-f$i;完成)\
rm-f/lib/systemd/system/multi-user.target.wants/*\
rm-f/etc/systemd/system/*.wants/*\
rm-f/lib/systemd/system/local fs.target.wants/*\
rm-f/lib/systemd/system/sockets.target.wants/*udev*\
rm-f/lib/systemd/system/sockets.target.wants/*initctl*\
rm-f/lib/systemd/system/basic.target.wants/*\
rm-f/lib/systemd/system/anaconda.target.wants/*;
卷[“/sys/fs/cgroup”]
运行yum-y update&&yum全部清除
运行yum-y install firewalld httpd mariadb服务器mariadb php mysql php gd php pear php xml php bcmath php mbstring php mcrypt php php gettext
#启用服务
运行systemctl enable httpd.service
运行systemctl enable mariadb.service
#启动服务
运行systemctl启动httpd.service
运行systemctl start mariadb.service
#打开防火墙端口
运行防火墙cmd--permanent--addservice=http
运行防火墙cmd--永久--添加服务=https
运行防火墙cmd——重新加载
暴露80
CMD[“/usr/sbin/init”]
所以当我建立这个形象的时候

docker build-t myimage。
然后,当我运行代码时,会出现以下错误:

The command '/bin/sh -c systemctl start httpd.service' returned a non-zero code: 1
Failed to get D-Bus connection: No connection to service manager.
当我进入交互模式时(在
运行systemctl start httpd.service
并重新启动映像后跳过命令):

在尝试手动启动服务
httpd
后,我发现以下错误:

The command '/bin/sh -c systemctl start httpd.service' returned a non-zero code: 1
Failed to get D-Bus connection: No connection to service manager.

所以,我不知道我做错了什么?

首先,欢迎来到Docker!:-)大量的Docker教程和文档都是围绕Ubuntu容器编写的,但我也喜欢Centos

好的,这里有几件事要谈:

  • 您遇到的是基于
    systemd
    的Docker容器,它们似乎需要额外的权限才能运行,即使这样,也需要大量额外的配置才能让它们正常工作。红帽队不确定这是在哪里

    如果你想试着让它工作,但我已经玩了好几次,在过去的几周内,还没有得到它的工作

  • 人们可能会说,这里的“真正问题”是Docker容器不应被视为“迷你虚拟机”。Docker是,容器系统使得将多个容器组合在一起变得很容易——它们在磁盘上很小,内存使用量很轻,并且易于联网

    这是一个例子。还有关于和的“Docker基础知识”文档

    因此,可以说,继续您试图在这里创建的设置的最佳方法(尽管一开始听起来可能更复杂)是将您的“堆栈”分解为您需要的服务,然后根据需要使用类似于
    docker compose
    (,)的工具来创建单用途docker容器

    在上面的例子中,您有两个服务,一个web服务器和一个数据库服务器。因此,两个Docker容器应该工作良好,通过数据库网络连接连接在一起。以下是一些例子:

    如果您为每个Docker容器运行一个服务,则不需要使用
    systemd
    来管理它们,因为Docker守护进程管理每个容器就像管理Unix进程一样。当进程终止时,Docker容器终止,这一点很重要,因为Docker服务器监视容器并可以自动重新启动它们,或者通知您


  • 这看起来更像是一个完美的例子,我的。它可以很容易地解释“systemctl start httpd.service”,而无需激活SystemD。我对一些数据库服务也做了同样的操作,但并不是特别针对mariadb.service,可能您可以尝试一下。

    我的理解是docker不自动支持systemd,但您可以使用正确的docker文件使其工作。看见这似乎意味着需要一个特定的图像,但我不这么认为,鉴于我在另一个页面上看到的,我应该把它作为书签!不管怎样,我自己也没试过,因为我要回LXC了。Systemd与LXC CentOS容器一起开箱即用,如果需要,您甚至可以
    yum安装openssh server
    和SSH到容器中。