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

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

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

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Docker

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

Q&A

1回答

1382閲覧

【Docker・unicorn・sinatra】localhostにアクセスできない

miyu_wl

総合スコア1

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Docker

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

0グッド

0クリップ

投稿2022/08/20 15:19

編集2022/08/20 15:21

発生している問題

Docker環境で、unicorn・sinatra を用いた web アプリを立ち上げるために docker-compose up -d を実行し、ブラウザで localhost:8080 にアクセスしようとしても、「サーバーに接続できません」と表示されてしまいます。

ディレクトリの構成

problem1
┣ app
┃┗ ruby
┃ ┣ app.rb
┃ ┣ config.ru
┃ ┣ Dockerfile
┃ ┣ Gemfile
┃ ┗ unicorn.rb
┣ mysql
┃┣ conf.d
┃┃┗ mysql.cnf
┃┣ 0_init.sql
┃┗ my.cnf

該当のソースコード

Dockerfile

docker

1FROM ruby:3.0.2 2 3LABEL maintainer="****" 4 5WORKDIR /app 6 7COPY Gemfile /app/Gemfile 8RUN bundle install 9 10COPY . /app 11 12CMD ["bundle", "exec", "unicorn", "-c", "unicorn.rb"]

docker-compose.yml

yml

1version: "3" 2 3networks: 4 front: 5 ipam: 6 config: 7 - subnet: 10.0.0.0/16 8 back: 9 ipam: 10 config: 11 - subnet: 10.10.0.0/16 12 13volumes: 14 socket: 15 driver: local 16 log: 17 driver: local 18 docroot: 19 driver: local 20 21services: 22 app: 23 container_name: minimal_sns_app 24 build: app/ruby 25 volumes: 26 - socket:/var/run/unicorn/ 27 networks: 28 - front 29 - back 30 environment: 31 TZ: "Asia/Tokyo" 32 command: /bin/bash 33 tty: true 34 db: 35 image: mysql:latest 36 container_name: db 37 hostname: db 38 networks: 39 - back 40 volumes: 41 - ./mysql/my.cnf:/etc/mysql/my.cnf 42 - ./mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf 43 - ./mysql/0_init.sql:/docker-entrypoint-initdb.d/0_init.sql 44 environment: 45 MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' 46 MYSQL_DATABASE: app 47 TZ: "Asia/Tokyo"

unicorn.rb

ruby

1listen '/var/run/unicorn/unicorn.sock' 2pid '/var/run/unicorn/unicorn.pid'

config.ru

ruby

1require File.expand_path '../app.rb', __FILE__ 2 3run App

Gemfile

ruby

1# A sample Gemfile 2source "https://rubygems.org" 3 4gem "sinatra" 5gem "unicorn"

app.rb

ruby

1require 'json' 2require 'sinatra' 3 4class App < Sinatra::Base 5 set :protection, :except => [:ip_spoofing] 6 7 get '/' do 8 "I am live!" 9 end 10 11 get '/test' do 12 env.to_json 13 end 14end

分かる方がいらっしゃったら、ご教授いただけますと幸いです。

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

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

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

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

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

CHERRY

2022/08/21 00:30

ポート8080の設定が記載されていませんが、どこか他の場所で設定されているのでしょうか?
miyu_wl

2022/08/21 02:37

ご回答ありがとうございます。 何も設定していませんでした。 試しに docker-compose.yml で servises>app>ports に "- 127.0.0.1:8080:80" と設定してみましたが、ブラウザでアクセスしてみると、「ページ"localhost:8080"を開けません。サーバーとの接続が予期せずに解除されました。これはサーバーでの処理が混み合っていると起きることがあります。数分後にやり直してください。」というメッセージが表示されます。 原因分かりますでしょうか。。
guest

回答1

0

試しに docker-compose.yml で servises>app>ports に "- 127.0.0.1:8080:80" と設定してみましたが、ブラウザでアクセスしてみると、「ページ"localhost:8080"を開けません。サーバーとの接続が予期せずに解除されました。これはサーバーでの処理が混み合っていると起きることがあります。数分後にやり直してください。」というメッセージが表示されます。

コンテナ内で、ポート 8080 で待ち受けているものはありますか?

unicorn.rb
listen '/var/run/unicorn/unicorn.sock'

unicorn が、 socket で待ち受けているようですが、unicorn のフロントに Web サーバか何かが待ち受けていますか?

unicorn に直接接続するのであれば、unicorn の待受方法を

listen 8080

にかえるとどうなるでしょうか。

投稿2022/08/21 05:31

CHERRY

総合スコア25216

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

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

miyu_wl

2022/08/21 07:45 編集

ご回答ありがとうございます。 とても初歩的な質問で申し訳ないのですが、「unicorn が、 socket で待ち受けている」とはどういった状況でしょうか?またその場合、どのようなアクセス手段があるのでしょうか? また、試しに unicorn.rb の"listen /var/run/unicorn/unicorn.sock' " を "listen 8080" に変更してみましたが、ブラウザで表示されるエラーメッセージに変化はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問