docker 无法获得 D-Bus 连接:不允许操作

docker 无法获得 D-Bus 连接:不允许操作

我在使用此 Dockerfile 时遇到此错误:

FROM centos:latest

ENV container docker
MAINTAINER The CentOS Project <[email protected]>

RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
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/*;

VOLUME [ "/sys/fs/cgroup" ]  

RUN rpm -U https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
RUN yum -y install zabbix-agent
RUN yum clean all

COPY ./zbx-speedtest.sh /etc/zabbix/bin/zbx-speedtest.sh
RUN chmod +x /etc/zabbix/bin/zbx-speedtest.sh
COPY ./speedtest.conf /etc/zabbix/zabbix_agentd.d/speedtest.conf

COPY ./zabbix-speedtest.service /etc/systemd/system/zabbix-speedtest.service
COPY ./zabbix-speedtest.timer /etc/systemd/system/zabbix-speedtest.timer

RUN systemctl enable zabbix-speedtest.timer
RUN systemctl enable zabbix-agent.service
RUN systemctl start zabbix-agent.service
RUN systemctl start zabbix-speedtest.timer

CMD ["/usr/sbin/init"]

当尝试使用或docker-compose时,docker build我收到此错误:

Failed to get D-Bus connection: Operation not permitted
ERROR: Service 'zbx' failed to build: The command '/bin/sh -c systemctl start zabbix-agent.service' returned a non-zero code: 1

我四处寻找,没有任何解决办法。如果使用 docker 无法做到这一点,请告诉我该学习哪个容器可以做到这一点?

zabbix-speedtest.timer

[Unit]
Description=Run a speedtest every 5 minutes

[Timer]
OnCalendar=*:0/5
# RandomizedDelaySec=30

[Install]
WantedBy=timers.target

zabbix-speedtest.service

[Unit]
Description=Run a speedtest
After=network.target

[Service]
Type=simple
#User=zabbix-agent
#User=root
User=zabbix
ExecStart=/etc/zabbix/bin/zbx-speedtest.sh --run
CPUSchedulingPolicy=fifo
CPUSchedulingPriority=80

[Install]
WantedBy=multi-user.target

答案1

当我下载并运行时centos:latest,它给我一个无法运行的 CentOS 8 Docker 容器systemd。您需要做更多的工作才能开始systemd工作,但您确实不需要 init 系统,因为 Docker 被设计为在其容器内运行单个进程。

看着Zabbix 制作的 Zabbix Agent Dockerfile,它不会尝试使用systemd

您是否尝试过使用zabbix/zabbix-agent:centos-5.0-latest并看看效果是否更好?

评论后更新:

使用这些建议后,您的 Dockerfile 可能如下所示:

FROM zabbix/zabbix-agent:centos-5.0-latest
ENV container docker

COPY ./zbx-speedtest.sh /etc/zabbix/bin/zbx-speedtest.sh
RUN chmod +x /etc/zabbix/bin/zbx-speedtest.sh
COPY ./speedtest.conf /etc/zabbix/zabbix_agentd.d/speedtest.conf

然后,您需要调整zabbix-speedtest.servicezabbix-speedtest.timer从要部署 Docker 容器的主机的上下文中运行。

相关内容