前提・実現したいこと
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/ツールのバージョンなど)
情報に不足ありましたら追加で記載するように致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。