撰写时无法使用服务名称从(fluentd)login驱动程序进行login

在docker中我有以下设置:

  • 应用程序(httpd)
  • Fluentd
  • ElasticSearch
  • Kibana

应用程序的日志驱动程序的configuration描述了stream畅的容器。 日志将被保存在ES中并显示在Kibana中。

当这个logdriverconfiguration成这样的时候,它可以工作:

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" 

但是我不想在主机networking上暴露我的fluentd。 我想在dockernetworking中保持“private”(我只想在主机networking上映射应用程序和kibana),就像这样:

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

端口24224仍然暴露(在dockerfile中),但它没有映射到主机networking上。 现在我想改变我的应用程序的日志驱动程序的configuration:日志:驱动程序:“fluentd”选项:fluentd地址:fluentd:24224标记:httpd.access

所以fluentd是fluentd容器的名称,它们在同一个networking中,但应用程序无法与之build立连接。

 failed to initialize logging driver: dial tcp: lookup fluentd 

这是否可能是因为日志选项是在撰写文件中的“链接”选项之前执行的?

有没有办法让这个工作?

目前这是不可能的。 处理日志驱动程序的docker deamon是在主机上运行的进程。 这不是networking中的服务,因此无法将服务名称parsing为IP。 看到这个github问题更详细的解释。

你将不得不发布一个端口才能工作。