无法在撰写中使用服务名称从 (fluentd) logdriver 登录

Can't log from (fluentd) logdriver using service name in compose

我在 docker 中有以下设置:

应用程序的日志配置driver描述的是 fluentd 容器。日志将保存在ES中并显示在Kibana中。

当日志driver配置成这样时,它起作用了:

web:
    image: httpd
    container_name: httpd
    ports:
      - "80:80"
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access

并且 fluentd 正在将其暴露的端口 24224 映射到主机的端口 24224。

 fluentd:
    build: ./fluentd
    image: fluentd
    container_name: fluentd
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"

但我不想在主机网络上暴露我的流利程度。我想将它 'private' 保留在 docker 网络中(我只想将应用程序和 kibana 映射到主机网络上),就像这样:

 fluentd:
   build: ./fluentd
   image: fluentd
   container_name: fluentd
   links:
     - "elasticsearch"

端口 24224 仍然暴露(在 docker 文件中)但它没有映射到主机网络。现在我想更改我的应用程序的 logdriver 配置: 记录: driver: "fluentd" 选项: fluentd-address: fluentd:24224 标签:httpd.access

所以 fluentd 是 fluentd 容器的名称,它们在同一网络中,但应用程序无法与其建立连接。

failed to initialize logging driver: dial tcp: lookup fluentd

这可能是因为日志记录选项在撰写文件中的 'link' 选项之前执行?

有没有办法让这个工作?

目前无法做到这一点。处理日志驱动程序的 docker 守护进程是主机上的一个进程 运行。它不是您网络中的服务,因此无法将服务名称解析为 IP。请参阅此 github issue 以获得更详细的解释。

您必须发布一个端口才能工作。