docker - 不允许使用Docker CentOS systemctl

标签 docker dockerfile centos7 systemd

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

相关文章:

Docker - 无法构建简单的 dotnet webapi 容器 : COPY failed: stat/var/lib/docker/overlay2 error

linux - 如何在 Centos 7 中使用 firewalld 启用 MPI mpirun

Nginx 无法从 docker 1.10.1 中的嵌入式 DNS 获取主机

docker - 如何在两个不同的Docker容器之间共享本地主机?

postgresql - 如何使用Ansible将转储导入docker容器中的postgres

Docker 日志问题 : Logs are not created or displayed in Tomcat's logs folder in docker container

linux - Dockerfile:QIODevice::seek:无法在顺序设备上调用搜索

docker - 无法在Dockerfile中运行多个COMMAND,最后一个被忽略

linux - 如何正确配置 jenkins swarm 作为服务以获得正确的 scrshoots?

python - 使用 crontab/cron 安排 python 3.6 脚本