Docker CentOS系统不允许使用

问题描述 投票:1回答:3

我尝试使用systemctl命令构建CentOS映像。但每次我建立它。我得到了这个错误:

Step 5/7 : RUN systemctl enable syslog-ng ; systemctl start syslog-ng
 ---> Running in 8f5a357895e7
Failed to get D-Bus connection: Operation not permitted
The command '/bin/sh -c systemctl enable syslog-ng ; systemctl start syslog-ng' returned a non-zero code: 1

我的Dockerfile:

FROM centos_systemctl:latest 

RUN yum -y update
RUN yum -y install epel-release ; \
    yum -y install vim ; \
    yum -y install wget ; \
    yum -y install rsync ; \
    yum -y groupinstall "Development tools"
# Install syslog-ng 3.14
RUN cd /etc/yum.repos.d/ ; \
    wget https://copr.fedorainfracloud.org/coprs/czanik/syslog-ng314/repo/epel-7/czanik-syslog-ng314-epel-7.repo ; \
    yum -y install syslog-ng
RUN systemctl enable syslog-ng ; systemctl start syslog-ng
RUN yum -y remove rsyslog
# COPY config syslog-ng
CMD ["/usr/sbin/init"]

centos_systemctl:latest根据这个:https://github.com/docker-library/docs/tree/master/centos#systemd-integration

有人知道我做错了什么吗?

谢谢,

docker dockerfile centos7 systemd
3个回答
1
投票

您应该假设systemd和systemctl只是在Docker中不起作用,并找到另一种方法来实现更高级别的目标。最佳实践是仅在Docker容器中运行一个服务和一个服务,并在需要多个协调服务时使用多个容器;如果你真的必须在同一个容器中运行多个东西,那么supervisord是一个常见的流程管理器。

Docker中systemd的最大问题是它默认想要控制很多东西。查看systemd home page上的图形:它想要做一堆内核级设置,管理文件系统,并启动多个服务,所有这些服务都已在主机上完成,在Docker容器中是不必要的。在Docker中运行systemd的“简单”方法包括授予其重新配置主机的权限;您提供的链接有一种“硬”方式,涉及删除其大多数控制文件。

在Dockerfile上下文中,还存在一个问题,即每个RUN行都是从一个没有进程运行的干净平板开始的。所以你的systemctl start ...命令不起作用,因为systemd init没有运行;即使它确实如此,当RUN命令完成时,该过程将消失,服务将不会在下一行运行。

您可以通过在a prebuilt syslog-ng image的搜索框中键入“syslog”来找到https://hub.docker.com,这将避免此问题。它也可能像你一样在CentOS基础上安装syslog-ng,但完全跳过systemd并只运行服务作为图像运行的主要命令

CMD ["syslog-ng", "-F"]

0
投票

CentOS 7及更高版本上的systemctl工具本身不会做任何事情,它只会与PID 1上的systemd守护进程通信。它使用dbus连接 - 这就是你看到的错误的原因。

如果你真的想使用经典的sbin / init,那么你应该先安装initscripts包。如果你想保持与真实系统的安装说明的更多兼容性,那么你也可以用一个没有systemd守护进程的工具替换systemctl,例如: docker-systemctl-replacement,其中一个也作为CMD用作init-daemon,以正确的顺序运行所有启用的服务。


0
投票

在docker中运行真正的init系统很有用。它完成了dockerization的所有工作,日志记录正常工作,CMD始终只是/ sbin / init。我遇到了和你一样的问题,systemctl没有工作,并且当关注centos的文档时,服务似乎根本没有开始。

尝试在启动容器之前忽略有关删除所有系统单元的建议,如https://github.com/dholth/vagrant-docker

我想知道哪些是必需的?

© www.soinside.com 2019 - 2024. All rights reserved.