以下是使用的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/

10-15 20:36