以下是使用的docker-compose。
version: '3.5'
services:
filebeat:
image: docker.elastic.co/beats/filebeat:6.4.2
volumes:
- ${PWD}/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- ${PWD}/test/input:/tmp/input:rw
filebeat.yml中的Filebeat配置为filebeat.inputs:
- type: container
paths:
- '/var/lib/docker/containers/*/*.log'
processors:
- add_docker_metadata:
host: "unix:///var/run/docker.sock"
- decode_json_fields:
fields: ["message"]
target: "json"
overwrite_keys: true
output.elasticsearch:
hosts: ["elasticsearch:9200"]
indices:
- index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
logging.json: true
logging.metrics.enabled: false
在docker-compose up
上,容器无法启动,并报告以下错误。退出:错误加载配置文件:配置文件(“filebeat.yml”)必须归用户标识符(uid = 0)或root拥有
这里有什么收获?我正在运行ubuntu的笔记本电脑上运行此示例。
最佳答案
通常,我们以root身份启动filebeat(以确保系统可以访问系统的所有文件)。
您可以尝试以root身份启动compose的filebeat服务:
version: '3.5'
services:
filebeat:
user: root #change here
image: docker.elastic.co/beats/filebeat:6.4.2
volumes:
- ${PWD}/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- ${PWD}/test/input:/tmp/input:rw
如果这还不够,您可以使用-strict.perms=false
参数运行容器,以禁用权限检查,例如:version: '3.5'
services:
filebeat:
user: root #change here
image: docker.elastic.co/beats/filebeat:6.4.2
command:
- "-e"
- "--strict.perms=false"
...
PS:-e
标志禁用syslog /文件输出,并在std错误中重定向所有输出(与您的观点无关,但通常在容器中希望从容器日志中读取filebeat日志)。More info on the official site。
关于docker - Filebeat无法作为Docker容器启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62960322/