我想在Azure IoT Edge中将Filebeat作为Docker容器运行。我希望Filebeat从其他正在运行的容器中获取日志。
我已经能够从文档(https://www.elastic.co/guide/en/beats/filebeat/6.8/running-on-docker.html#_volume_mounted_configuration)作为Docker容器运行filebeat
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模块。
[我创建了一个包含以下Dockerfile包含filebeat.yml
文件的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
这很好,可以从其他容器中收集日志。
现在我的问题是:
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
为了收集日志?
[从Azure IoT Edge门户中的另一篇SO帖子(Mount path to Azure IoT Edge module),我尝试了以下操作:
"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_.-]
指定路径?
感谢您的帮助。