Centos

docker 無法獲得 D-Bus 連接:不允許操作

  • July 4, 2020

我在使用這個 Dockerfile 時遇到了這個錯誤:

FROM centos:latest

ENV container docker
MAINTAINER The CentOS Project <cloud-ops@centos.org>

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-composedocker 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

當我下載並執行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 容器的主機的上下文中執行。

引用自:https://unix.stackexchange.com/questions/596355