撰写时无法使用服务名称从(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问题更详细的解释。
你将不得不发布一个端口才能工作。