gpt4 book ai didi

docker - 不允许使用Docker CentOS systemctl

转载 作者:行者123 更新时间:2023-12-02 19:05:48 27 4
gpt4 key购买 nike

我试图用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

有人知道我做错了吗?

谢谢,

最佳答案

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

Docker中systemd的最大问题是,默认情况下,它想要控制很多东西。看一看systemd home page上的图形:它想要进行一堆内核级的设置,管理文件系统并启动一些服务,所有这些服务已经在主机上完成,而在Docker容器中则是不必要的。在Docker上运行systemd的“简单”方法涉及给它重新配置主机的权限。您提供的链接具有“硬性”方式,涉及删除其大部分控制文件。

在Dockerfile上下文中,还有一个问题,每条RUN行都从一个干净的表盘开始,根本没有任何进程在运行。因此,由于systemd初始化未运行,因此systemctl start ...命令不起作用。即使这样做,当RUN命令完成时,该过程也会消失,并且该服务不会在下一行运行。

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

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

关于docker - 不允许使用Docker CentOS systemctl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52737283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com