docker - 如何从第二个服务中的第一个 docker-compose 服务获取容器 ID?
问题描述
我想在我的主应用程序容器旁边运行 filebeat 作为边车容器来收集应用程序日志。我正在使用 docker-compose 同时启动这两个服务,filebeat 取决于应用程序容器。
这一切都很好。我正在为应用程序日志使用共享卷。但是,我也想在 filebeat 中收集 docker 容器日志(stdout JSON 驱动程序)。
Filebeat 为此提供了一个 docker/container 输入模块。这是我的配置。第一部分是获取应用程序日志。第二部分应该得到 docker 日志:
filebeat.inputs:
- type: log
paths:
- /path/to/my/application/*.log.json
exclude_lines: ['DEBUG']
- type: docker
containers.ids: '*'
json.message_key: message
json.keys_under_root: true
json.add_error_key: true
json.overwrite_keys: true
tags: ["docker"]
我不喜欢什么containers.ids: '*'
。在这里,我想将 filebeat 指向直接应用程序容器,而忽略所有其他容器。由于在运行启动两个容器之前我不知道容器 ID docker-compose up
,我想知道是否有一种简单的方法可以从我的 filebeat 容器中的应用程序容器中获取容器 ID(通过 docker-comnpose?)来过滤这个 ID ?
解决方案
这也不是真正回答问题,但也应该作为解决方案。
主要思想是在 filebeat 自动发现过滤器中使用标签。
取自这篇文章:https ://discuss.elastic.co/t/filebeat-autodiscovery-filtering-by-container-labels/120201/5
filebeat.yml
filebeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains:
docker.container.labels.somelabel: "somevalue"
config:
- type: docker
containers.ids:
- "${data.docker.container.id}"
output.console:
pretty: true
docker-compose.yml:
version: '3'
services:
filebeat:
image: docker.elastic.co/beats/filebeat:6.2.1
command: "--strict.perms=false -v -e -d autodiscover,docker"
user: root
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
- /var/lib/docker/containers:/var/lib/docker/containers
- /var/run/docker.sock:/var/run/docker.sock
test:
image: alpine
command: "sh -c 'while true; do echo test; sleep 1; done'"
depends_on:
- filebeat
labels:
somelabel: "somevalue"
推荐阅读
- python - 如何从 Python 中的文本文件中提取数据?
- pytorch - 在 Pytorch 中对整数张量执行最大池化
- python - 如何在 Python 中将字典更新为另一个嵌套字典?
- php - 在同一域上使用 jquery ajax 调用进行 post 调用时出现错误 403 Forbidden
- python - 如何让我的 Discord 机器人向聊天室发送消息
- kubernetes - GKE 上的 Kubernetes 持久卷未安装
- python - 调用外部 Python 代码时强制打开 Python 控制台
- angular - 分页后如何动态获取Angular FormArray字段中的绝对索引?
- c# - 具有相同元素的 XML 文件
- google-authenticator - 如何在我的应用程序(nodeJS)中集成谷歌身份验证器?