ruby-on-rails - 无法打开到 localhost:9200 的 TCP 连接 - Docker 上的 Rails
问题描述
我想在 docker 上运行 ElasticSearch 并将 rails 与它连接。
这是我的 docker-compose.yml 文件
version: '3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: P@ssw0rd
MYSQL_DATABASE: chatsystem
MYSQL_USER: root
MYSQL_PASSWORD: P@ssw0rd
ports:
- "3307:3306"
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
app:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- ".:/ChatSystem"
depends_on:
- db
- es01
- es02
- es03
ports:
- "3000:3000"
links:
- db
- es01
- es02
- es03
environment:
DB_USER: root
DB_NAME: chatsystem
DB_PASSWORD: P@ssw0rd
DB_HOST: db
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
当我通过浏览器运行docker-compose up
和访问时。localhost:9200
我得到这个回应
{
"name": "es01",
"cluster_name": "es-docker-cluster",
"cluster_uuid": "fNDAvsI6QUyHkzy919PHhw",
"version": {
"number": "7.4.2",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
"build_date": "2019-10-28T20:40:44.881551Z",
"build_snapshot": false,
"lucene_version": "8.2.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
当我尝试创建新的“消息”时,我收到此错误
Errno::EADDRNOTAVAIL(无法打开与 localhost:9200 的 TCP 连接(无法分配请求的地址 - connect(2) 用于“localhost”端口 9200))
消息.rb 文件
class Message < ApplicationRecord
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
settings do
mappings dynamic: false do
indexes :message, type: :text
end
end
end
Message.import force: true
我正在使用这个宝石
gem 'elasticsearch-model', git: 'git://github.com/elastic/elasticsearch-rails.git', branch: 'master'
gem 'elasticsearch-rails', git: 'git://github.com/elastic/elasticsearch-rails.git', branch: 'master'
解决方案
在您的环境中,您必须添加ELASTICSEARCH_URL=http://elasticsearch:9200
然后重建您的 docker compose。你可以把这篇文章作为参考。
推荐阅读
- python - 如何将属性字符串放入函数中
- tensorflow - 如何在 TF:Slim + TF:deeplab 中对预处理前后的图像进行目视检查
- javascript - 对象到数组 JSON 没有 JQuery
- php - 如何从 goaop 框架修复“调用未定义方法 PhpParser\Node\Expr\Variable::toString()”
- python - 想杀死我的标签,但 process.kill() 不起作用
- bash - 为什么使用 here-doc 时“/dev/stdin”不存在?
- mongodb - 我应该使用什么“大数据”解决方案来解决这个问题?基数?MongoDB?其他的?
- javascript - 为什么扩展在 app electron 中不活跃?
- javascript - 为什么一种看似较长的字符串到 JavaScript 日期方法比另一种看起来更短更简单的方法更快?
- sql-server-2008 - 在源/临时表中找不到时更新目标行