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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 5

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

Docker

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

Q&A

解決済

1回答

1632閲覧

dockerを使用したlocalhost接続のさい、sidekiqのダッシュボードが表示されずエラーになってしまいます。どなたか知見をお持ちの方がいらっしゃれば教えて頂けませんでしょうか?

akikko

総合スコア32

Ruby on Rails 5

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

Docker

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

0グッド

0クリップ

投稿2021/07/29 03:44

編集2021/07/29 03:46

Dockerでlocalhostを立ち上げており、sidekiqのダッシュボードを表示させたいのですが、なぜかlocalhostだけでエラーが出てしまいます。

現在herokuでアプリを運用しておりますが、stagingとproductionでは問題なく表示ができています。
また、メールのバックグランド処理にも使っていますが、問題なく稼働しております。

dockerのlocalhostの接続の問題だとは思うのですが、どの部分をどう変更すればよいのでしょうか?
どなたか、アイデアを教えて頂けると大変助かります。どうぞよろしくお願いいたします。

###エラー内容

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

![イメージ説明]

###docker-compose.yml

version: "3" services: web: &web build: context: . dockerfile: docker/web/Dockerfile command: sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 80 -b '0.0.0.0' -e development" ports: - 80:80 - 1025:1025 volumes: - bundle_install:/usr/local/bundle - "./:/app" # 1. exclude volumes - /app/.git - /app/.github - /app/.idea - /app/log - /app/tmp - /app/vendor stdin_open: true tty: true environment: TZ: Asia/Tokyo REDIS_HOST: localhost redis: image: "redis:latest" ports: - "6379:6379" volumes: - "./data/redis:/data" volumes: mysql-data: driver: local bundle_install:

###sidekiq.yml

:verbose: false :concurrency: 10 :queues: - test - default - mailers

###sidekiq.rb

if Rails.env.production? || Rails.env.staging? Sidekiq.configure_server do |config| config.redis = { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379') } end Sidekiq.configure_client do |config| config.redis = { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379')} end else #local Sidekiq.configure_server do |config| config.redis = { url: 'redis://localhost:6379', namespace: 'test_sidekiq' } end Sidekiq.configure_client do |config| config.redis = { url: 'redis://localhost:6379', namespace: 'test_sidekiq' } end end

###routes

require 'sidekiq/web' Rails.application.routes.draw do #sidekiq--------------------------------------------- authenticate :user do #authenticate mount Sidekiq::Web => '/sidekiq' end end

大変お忙しい中にも関わらず、ここまで読んで下さってありがとうございます。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Sidekiqを web サービス(コンテナ)内で動かされている前提で書きます。

この web での localhost は、Docker を動かしているホスト上ではなく、 web として動いているコンテナ内で見えている、自分自身のネットワークです。

そのため、 'redis://localhost:6379' のような指定を web の中でされたとしても、この web の中には Redis が動いていないため、接続できない(エラーメッセージ Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) が出ている)状況です。

これを回避するには、 redis サービス(コンテナ)を見るように設定を変えます。

Docker Compose のネットワークで redis サービスへ接続するには、このサービスの名前 redis で名前解決できます(Docker Compose で作成されたブリッジ・ネットワークの IP アドレスが、自動的に分かります)。

そのため、 localhost とされている部分は、 'redis://redis:6379' としておけば、 web サービスからも接続可能になると思われます。

投稿2021/07/29 04:20

zembutsu

総合スコア1584

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

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

akikko

2021/07/29 04:30 編集

大変ご丁寧に本当にありがとうございます!なるほど、localhostだからlocalというわけではなかったのですね。 頂いた内容にてsidekiq.rbを変更しましたところ、すぐに解決することができました!! 大変ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問