Laravel项目连Elasticsearch遇cURL错误7,如何通过docker-compose解决?
问题
在远程Ubuntu服务器上通过docker-compose启动服务,Laravel项目连接Elasticsearch时出现以下错误:
In CurlFactory.php line 185: cURL error 7: Failed to connect to elasticsearch port 9200: Connection refused
我的docker-compose.yml配置如下:
version: '3' services: elasticsearch: image: my_image_name ports: - 9200:9200 networks: - overlay website: image: my_image_name ports: - 80:80 links: - elasticsearch networks: - overlay environment: - ELASTIC_SEARCH_URL=http://elasticsearch:9200 networks: overlay:
目前可以通过ip_address:9200访问Elasticsearch,返回信息:
{ "status": 200, "name": "Greer Grant", "cluster_name": "elasticsearch", "version": { "number": "1.7.5", "build_hash": "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4", "build_timestamp": "2016-02-02T09:55:30Z", "build_snapshot": false, "lucene_version": "4.10.4" }, "tagline": "You Know, for Search" }
有方案提到需要修改elasticsearch.yml中的network.host为0.0.0.0,但我使用的是自定义预构建Elasticsearch镜像,无法修改该文件,请问能否通过docker-compose.yml覆盖此配置?
解决方案
可以通过docker-compose.yml直接覆盖Elasticsearch的network.host配置,针对你的Elasticsearch 1.7.5版本,提供两种有效实现方式:
方式一:环境变量传递
Elasticsearch支持将配置项转为环境变量(格式为ES_<配置路径>,层级用下划线分隔),network.host对应的环境变量是ES_NETWORK_HOST。修改elasticsearch服务配置:
elasticsearch: image: my_image_name ports: - 9200:9200 networks: - overlay environment: - ES_NETWORK_HOST=0.0.0.0
方式二:命令行参数指定
在docker-compose.yml中通过command字段,为Elasticsearch启动命令添加配置参数:
elasticsearch: image: my_image_name ports: - 9200:9200 networks: - overlay command: elasticsearch --network.host 0.0.0.0
验证配置生效
重启服务:
docker-compose down && docker-compose up -d
进入website容器测试连通性:
docker-compose exec website curl http://elasticsearch:9200
若返回Elasticsearch状态信息,说明配置生效,Laravel项目即可正常连接。
内容的提问来源于stack exchange,提问作者Tu Le Thanh
相关产品推荐
相关产品推荐

