无法在撰写中使用服务名称从 (fluentd) logdriver 登录
Can't log from (fluentd) logdriver using service name in compose
我在 docker 中有以下设置:
- 应用程序 (httpd)
- 流畅
- 弹性搜索
- Kibana
应用程序的日志配置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 以获得更详细的解释。
您必须发布一个端口才能工作。
我在 docker 中有以下设置:
- 应用程序 (httpd)
- 流畅
- 弹性搜索
- Kibana
应用程序的日志配置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 以获得更详细的解释。
您必须发布一个端口才能工作。