質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

解決済

1回答

1671閲覧

circleCI上のメインコンテナからelasticsearchコンテナへの参照がエラーになる

ichan

総合スコア7

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

0クリップ

投稿2021/06/01 03:51

前提・実現したいこと

circleCI2.0上のプライマリコンテナからelasticsearchコンテナを参照できるようにしたいです。
具体的には image: circleci/ruby:2.5.5-node 上で動作させるRailsアプリケーション上から http://elasticsearch:9200 のリクエストが通るようにしたいです。
普段の開発はローカルPCのdocker-compose上で行っており一部のテストでVCRを使用している兼ね合いでhttp://localhost:9200ではなく http://elasticsearch:9200で名前解決を行う必要があるのですが、うまくいきません。

https://circleci.com/docs/ja/2.0/configuration-reference/#docker
の中のnameキーが他から参照するためのコンテナの名前。 デフォルトでは、localhost を通してコンテナ サービスにアクセスできます。と書かれているので、 これを用いてconfig.yml中のelasticsearchのimageに対して name:elasticsearchを設定しています。

発生している問題・エラーメッセージ

circle上でのrspec実行時に以下のエラーメッセージが発生しました。

Failure/Error: after_save { __elasticsearch__.index_document } Faraday::ConnectionFailed: Connection refused - Connection refused - connect(2) for "elasticsearch" port 9200 (elasticsearch:9200)

該当のソースコード

.circleci/config.yml

config

1# Ruby CircleCI 2.0 configuration file 2# 3# Check https://circleci.com/docs/2.0/language-ruby/ for more details 4# 5defaults: &defaults 6 docker: 7 # specify the version you desire here 8 - image: circleci/ruby:2.5.5-node 9 environment: 10 - TZ: Asia/Tokyo 11 - LANG: ja_JP.UTF-8 12 - LC_ALL: C.UTF-8 13 - LANGUAGE: ja_JP.UTF-8 14 - image: circleci/postgres:11.2-ram 15 - image: circleci/redis 16 - image: bitjourney/elasticsearch:6.2.4 17 name: elasticsearch 18 working_directory: ~/repo 19version: '2.1' 20jobs: 21 run-test: 22 <<: *defaults 23 steps: 24 - checkout 25 26 - run: 27 name: set environment variables 28 command: | 29 echo 'export RAILS_ENV="test"' >> $BASH_ENV 30 echo 'export RACK_ENV="test"' >> $BASH_ENV 31 /* 中略 */ 32 # run tests! 33 - run: 34 name: rspec 35 command: | 36 mkdir /tmp/test-results 37 TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)" 38 bundle exec rspec --format progress $TEST_FILES

config/elasticsearch.yml
.envファイルでELASTICSEARCH_URL='elasticsearch:9200'と定義しそちらを参照しています。

elasticsearch

1default: &default 2 host: <%= ENV['ELASTICSEARCH_URL'] || 'localhost:9200' %> 3 logs: <%= Rails.env.development? %> 4 trace: <%= Rails.env.development? %> 5 6local: 7 <<: *default 8 9development: 10 <<: *default 11 12test: 13 <<: *default 14 15staging: 16 <<: *default 17 18production: 19 <<: *default

試したこと

circleCI上でRerun Job with SSHを実行し、ビルドコンテナにssh接続を行いcurlを実行してみましたが失敗しました。

[circleci@xxx]:~$ curl -XGET "http://elasticsearch:9200" curl: (7) Failed to connect to elasticsearch port 9200: 接続を拒否されました

またconfig.ymlでname:elasticsearchを設定しない場合にssh接続を行った場合にcurl -XGET "http://localhost:9200" が成功することは確認しました。加えて.envファイルをELASTICSEARCH_URL='localhost:9200'に変更した場合はrspecが通ることも確認しております。

補足情報(FW/ツールのバージョンなど)

情報に不足ありましたら追加で記載するように致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

http.host: '0.0.0.0' を設定することで解決しました。

- image: bitjourney/elasticsearch:6.2.4 name: elasticsearch environment: http.host: '0.0.0.0' http.port: 9200

投稿2021/06/02 02:13

ichan

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問