Docker Elastic日志插件报错:hosts参数缺失 求解决方案
Docker日志驱动连接Elastic Cloud报错:"A hosts flag is required"
环境信息
- Ubuntu 22.04 Jammy
- Docker 20.10.22
- Elastic Logging插件版本:elastic/elastic-logging-plugin:8.5.3(已安装启用)
问题重现
无论是通过/etc/docker/daemon.json设置默认日志驱动,还是通过CLI参数单独配置容器日志,启动容器时均报错:
Error response from daemon: failed to initialize logging driver: error creating logger: LogDriver.StartLogging: error creating client config: A hosts flag is required
原daemon.json配置
{ "log-driver": "elastic/elastic-logging-plugin:8.5.3", "log-opts": { "cloud_id": "...", "api_key": "...", "output.elasticsearch.index": "dockerlogs-wiki-%{+yyyy.ww}", "max-file": "10", "max-size": "4M" } }
原CLI启动命令
docker create --name=container-name \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --restart=unless-stopped \ -h container-name \ --network=wikinet \ --log-driver=elastic/elastic-logging-plugin:8.5.3 \ --log-opt cloud_id="..." \ --log-opt api_key="..." \ --log-opt max-file=10 \ --log-opt max-size=5M \ ghcr.io/org/container-name:latest
解决方案与调试思路
1. 移除不兼容的日志选项
max-file和max-size是Docker默认json-file日志驱动的专属参数,Elastic Logging插件不支持这些配置,它们会干扰插件的配置解析流程,导致错误提示缺失hosts参数。
修改后的daemon.json:
{ "log-driver": "elastic/elastic-logging-plugin:8.5.3", "log-opts": { "cloud_id": "你的Elastic Cloud ID", "api_key": "你的API密钥", "output.elasticsearch.index": "dockerlogs-wiki-%{+yyyy.ww}" } }
修改后的CLI命令:
docker create --name=container-name \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --restart=unless-stopped \ -h container-name \ --network=wikinet \ --log-driver=elastic/elastic-logging-plugin:8.5.3 \ --log-opt cloud_id="你的Elastic Cloud ID" \ --log-opt api_key="你的API密钥" \ ghcr.io/org/container-name:latest
2. 验证Cloud ID与API Key有效性
- 确认
cloud_id是从Elastic Cloud控制台复制的完整字符串(格式类似deployment-name:dXMtY2VudHJhbDEuZ2NwLmNsb3VkLmVzLmlvJ...) - 确认
api_key拥有Elasticsearch的写入权限(可在Elastic Cloud控制台创建具有writer角色的API密钥)
3. 检查版本兼容性
确保Elastic Logging插件版本(8.5.3)与Elastic Cloud集群版本完全一致,版本不匹配会引发配置解析或通信问题。
4. 查看Docker守护进程日志定位细节
执行以下命令查看Docker重启后的详细日志,获取插件初始化时的具体错误:
journalctl -u docker.service -f
5. 用测试容器验证配置
先创建一个简单的测试容器,排除业务容器自身配置的干扰:
docker run -d --log-driver=elastic/elastic-logging-plugin:8.5.3 \ --log-opt cloud_id="你的Elastic Cloud ID" \ --log-opt api_key="你的API密钥" \ alpine echo "test log"
如果测试容器能正常启动,再迁移配置到业务容器。
内容的提问来源于stack exchange,提问作者kthy
相关产品推荐
相关产品推荐

