docker - 在 docker 中运行 Filebeat 作为 IoT Edge 模块
问题描述
我想在 Azure IoT Edge中将 Filebeat作为 Docker 容器运行。我希望 Filebeat 从其他运行容器的日志中获取日志。
从文档( https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_volume_mounted_configuration)中,我已经能够将 filebeat 作为 Docker 容器运行
docker run -d \
--name=filebeat \
--user=root \
--volume="$(pwd)/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker.elastic.co/beats/filebeat:6.8.3 filebeat -e -strict.perms=false
使用此命令和正确的filebeat.yml
文件,我可以收集设备上每个正在运行的容器的日志。
现在我想将此配置部署为 Azure IoT Edge 模块。
我创建了一个filebeat.yml
包含以下 Dockerfile 的文件的 docker 映像:
FROM docker.elastic.co/beats/filebeat:6.8.3
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chmod go-w /usr/share/filebeat/filebeat.yml
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat
我通过在本地运行测试了这个 Dockerfile
docker build -t filebeat .
和
docker run -d \
--name=filebeat \
--user=root \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
filebeat:latest filebeat -e -strict.perms=false
这很好用,来自其他容器的日志会按应有的方式收集。
现在我的问题是:
- 在 Azure IoT Edge 中,如何挂载卷以访问设备上运行的其他 Docker 容器,就像使用
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
为了收集日志?
从 Azure IoT Edge 门户中的其他 SO 帖子(安装路径到 Azure IoT Edge 模块),我尝试了以下操作:
"HostConfig": {
"Mounts": [
{
"Target": "/var/lib/docker/containers",
"Source": "/var/lib/docker/containers",
"Type": "volume",
"ReadOnly: true
},
{
"Target": "/var/run/docker.sock",
"Source": "/var/run/docker.sock",
"Type": "volume",
"ReadOnly: true
}
]
}
}
但是当我部署这个模块时,我有以下错误:
2019-11-25T10:09:41Z [WARN] - Could not create module FilebeatAgent
2019-11-25T10:09:41Z [WARN] - caused by: create /var/lib/docker/containers: "/var/lib/docker/containers" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path
我不明白这个错误。如何仅使用指定路径[a-zA-Z0-9][a-zA-Z0-9_.-]
?
谢谢你的帮助。
编辑
在 Azure IoT Edge 门户中,createOptions json:
{
"HostConfig": {
"Binds": [
"/var/lib/docker/containers:/var/lib/docker/containers",
"/var/run/docker.sock:/var/run/docker.sock"
]
}
}
解决方案
推荐阅读
- reactjs - VideoJS 程序化播放仅适用于 setTimeout
- javascript - 我在使用 discord.js 制作记分牌时遇到问题
- javascript - 在反应返回中编写javascript代码
- regex - Powershell - 如何用字符串中的变量替换数字?
- python - 如何修复我的 Discord 音乐机器人的命令错误?
- javascript - 有没有办法优化从分页 API 收集数据的代码?
- c# - 我的 Exception 对象如何在运行时有一堆在开发时不存在的不同属性?
- postgresql - 管理数以万计访问 PostgreSQL 数据库的桌面应用程序用户的最佳解决方案
- css-selectors - 在 Cypress 中正确链接选择器
- python - S= ' ' +S + ' ' 是什么意思?为什么空间需要连接到两端?