将AWS CloudWatch Agent打包入Docker容器时遇总线连接错误求助
解决Docker打包CloudWatch Agent时的"Failed to connect to bus"错误
嘿,这个问题我之前碰到过好几次,其实根源很明确:CloudWatch Agent默认会尝试依赖systemd或者dbus这类系统服务管理工具,但Docker容器默认是极简环境,没有完整的init系统(比如systemd),也不会自动启动dbus服务,所以才会弹出这个报错。
下面给你几个可行的解决方案,按推荐程度排序:
方案一:直接以命令行启动CloudWatch Agent(最推荐)
完全摆脱对systemd的依赖,手动指定配置文件启动agent,完全符合容器"单进程"的最佳实践。
修改你的Dockerfile,步骤如下:
FROM ubuntu:16.04 RUN \ apt-get -y update && \ apt-get -y install wget unzip && \ wget https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip && \ unzip AmazonCloudWatchAgent.zip && \ ./install.sh # 把你提前准备好的CloudWatch配置文件复制到容器内的默认路径 COPY config.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json # 直接用命令行启动agent,跳过systemd CMD ["/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent", "-config-file", "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json"]
注意:config.json需要你自己提前写好,里面要定义好你要监控的指标、日志路径等配置内容。
方案二:使用带systemd的基础镜像(不推荐)
如果你非得用systemd来管理agent,可以试试自带systemd的Ubuntu镜像,比如ubuntu:16.04-systemd。不过这种镜像体积大,而且启动容器时需要特殊参数,不符合容器轻量化的思路。
修改Dockerfile的基础镜像:
FROM ubuntu:16.04-systemd # 后续安装步骤和原来一致,最后启用agent服务 RUN systemctl enable amazon-cloudwatch-agent.service
启动容器时必须加上这些参数(否则systemd没法正常运行):
docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro your-image-name
方案三:手动启动dbus服务(临时测试用)
如果只是临时测试,可以在启动agent前手动拉起dbus服务,但这种方式稳定性不高,不建议用于生产环境。
在Dockerfile里加个启动脚本:
FROM ubuntu:16.04 RUN \ apt-get -y update && \ apt-get -y install wget unzip dbus && \ wget https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip && \ unzip AmazonCloudWatchAgent.zip && \ ./install.sh # 写个简单的启动脚本,先启动dbus再启动agent RUN echo '#!/bin/bash' > /start-agent.sh && \ echo 'service dbus start' >> /start-agent.sh && \ echo '/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config-file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json' >> /start-agent.sh && \ chmod +x /start-agent.sh CMD ["/start-agent.sh"]
总的来说,优先选方案一,既简单又符合容器化的最佳实践,能彻底解决这个错误。
内容的提问来源于stack exchange,提问作者Nirav
相关产品推荐
相关产品推荐

