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

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

新規登録して質問してみよう
ただいま回答率
87.20%
docker-compose

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

Docker

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

解決済

Docker-composeでNginxからRails(Puma)に接続できない("2: No such file or directory"と出てpuma.sockを参照できない)

hajsu00
hajsu00

総合スコア117

docker-compose

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

Docker

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

1回答

0評価

0クリップ

218閲覧

投稿2022/05/26 05:27

編集2022/05/27 21:21

Docker上でRails(Puma) + Nginxの構成で、アプリを作成中です。
NginxがRailsのpuma.sockを参照できないエラーが解決できずにいます。
ご助言をいただけると幸いです。

開発環境

  • ruby 3.0.1
  • Rails 6.1.4.4
  • puma 5.5.2
  • nginx 1.21.6

起きている問題

ブラウザからnginxのlocalhost:80にアクセスすると、nginxから502 Bad Gatewayが返ってくる。
このとき、$docker-compose logsを実行すると次のエラーが返ってくる。

bash

nginx_1 | 2022/05/26 04:37:12 [crit] 9#9: *1 connect() to unix:///var/www/myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 172.23.0.1, server: localhost:3000, request: "GET / HTTP/1.1", upstream: "http://unix:///var/www/myapp/tmp/sockets/puma.sock:/", host: "localhost"

前提事項

  • RailsとNginxのイメージを$docker build -t ...で各々作成し、docker-compose.ymlで起動しています。
  • Rails用のDockerfileは本番環境用(ECS Fargate用)にCMD bash -c "bundle exec puma -e production"を実行しており、これを開発環境用にdocker-compose.ymlcommand: "bundle exec puma -C config/ruby.puma"で置き換えています。
  • /var/www/myapp/tmp/sockets/puma.sockが存在することおよびアクセスできることは、Railsコンテナ内に直接入って確認済みです。
  • Railsのdevelopment.logにはアクセス履歴はありません。
  • ymlのRailsコマンドをcommand: "bundle exec puma -p 3000 -C config/puma.rb"としてブラウザからlocalhost:3000にアクセスすると、正常にアプリケーションが表示される。

関連コードおよびログ

ログ($ docker-compose logs)

bash

Attaching to myapp_app_development, myapp_nginx_development, myapp_db_development nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: using the "epoll" event method nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: nginx/1.21.6 nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: OS: Linux 5.10.76-linuxkit nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: getrlimit(RLIMIT_NOFILE): 1048576:1048576 nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: start worker processes nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: start worker process 9 nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: start worker process 10 nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: start worker process 11 nginx_1 | 2022/05/26 04:36:09 [notice] 8#8: start worker process 12 nginx_1 | 2022/05/26 04:37:12 [crit] 9#9: *1 connect() to unix:///var/www/myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 172.23.0.1, server: localhost:3000, request: "GET / HTTP/1.1", upstream: "http://unix:///var/www/myapp/tmp/sockets/puma.sock:/", host: "localhost" nginx_1 | 172.23.0.1 - - [26/May/2022:04:37:12 +0000] "GET / HTTP/1.1" 502 559 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36" "-" app_1 | [1] Puma starting in cluster mode... app_1 | [1] * Puma version: 5.5.2 (ruby 3.0.1-p64) ("Zawgyi") app_1 | [1] * Min threads: 5 app_1 | [1] * Max threads: 5 app_1 | [1] * Environment: development app_1 | [1] * Master PID: 1 app_1 | [1] * Workers: 2 app_1 | [1] * Restarts: (���) hot (���) phased app_1 | [1] * Preloading application app_1 | [1] * Listening on unix:///var/www/myapp/tmp/sockets/puma.sock app_1 | [1] ! WARNING: Detected 6 Thread(s) started in app boot: app_1 | [1] ! #<Thread:0x00005577ea5c6158@listen-run_thread /usr/local/bundle/gems/listen-3.7.0/lib/listen/thread.rb:17 sleep> - /usr/local/bundle/gems/rb-inotify-0.10.1/lib/rb-inotify/notifier.rb:317:in `select' app_1 | [1] ! #<Thread:0x00005577ea5c48f8@listen-wait_thread /usr/local/bundle/gems/listen-3.7.0/lib/listen/thread.rb:17 sleep_forever> - /usr/local/lib/ruby/3.0.0/forwardable.rb:238:in `pop' app_1 | [1] ! #<Thread:0x00005577ea4d2d28@listen-run_thread /usr/local/bundle/gems/listen-3.7.0/lib/listen/thread.rb:17 sleep> - /usr/local/bundle/gems/rb-inotify-0.10.1/lib/rb-inotify/notifier.rb:317:in `select' app_1 | [1] ! #<Thread:0x00005577ea4d1bf8@listen-wait_thread /usr/local/bundle/gems/listen-3.7.0/lib/listen/thread.rb:17 sleep_forever> - /usr/local/lib/ruby/3.0.0/forwardable.rb:238:in `pop' app_1 | [1] ! #<Thread:0x00005577ea25fde8@listen-run_thread /usr/local/bundle/gems/listen-3.7.0/lib/listen/thread.rb:17 run> - <internal:dir>:15:in `open' app_1 | [1] ! #<Thread:0x00005577ea25e9e8@listen-wait_thread /usr/local/bundle/gems/listen-3.7.0/lib/listen/thread.rb:17 sleep_forever> - /usr/local/lib/ruby/3.0.0/forwardable.rb:238:in `pop' app_1 | [1] Use Ctrl-C to stop app_1 | [1] - Worker 0 (PID: 22) booted in 0.08s, phase: 0 app_1 | [1] - Worker 1 (PID: 23) booted in 0.09s, phase: 0 db_1 | 2022-05-26 04:36:09+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started. db_1 | 2022-05-26 04:36:09+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db_1 | 2022-05-26 04:36:09+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started. db_1 | '/var/run/mysqld/mysqld.sock' -> '/tmp/mysql.sock' db_1 | 2022-05-26T04:36:10.318617Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead. db_1 | 2022-05-26T04:36:10.318685Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.28) starting as process 1 db_1 | 2022-05-26T04:36:10.333106Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. db_1 | 2022-05-26T04:36:10.588885Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. db_1 | 2022-05-26T04:36:10.843918Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. db_1 | 2022-05-26T04:36:10.844011Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. db_1 | 2022-05-26T04:36:10.848101Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. db_1 | 2022-05-26T04:36:10.902405Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock db_1 | 2022-05-26T04:36:10.902727Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.28' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server - GPL.

Dockerfile

FROM ruby:3.0.1 RUN apt-get update -qq && apt-get install -y nodejs RUN mkdir -p /var/www/myapp RUN mkdir -p /var/www/myapp/tmp/sockets RUN mkdir -p /var/www/myapp/tmp/pids WORKDIR /var/www/myapp COPY Gemfile /var/www/myapp/Gemfile COPY Gemfile.lock /var/www/myapp/Gemfile.lock RUN bundle install RUN curl https://deb.nodesource.com/setup_16.x | bash RUN curl https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update && apt-get install -y nodejs yarn COPY . /var/www/myapp # Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] RUN bundle exec rails assets:precompile RUN bundle exec rails tailwindcss:build VOLUME /var/www/myapp/public VOLUME /var/www/myapp/tmp # Start the main process. CMD bash -c "bundle exec puma -e production"

docker-compose.yml

yml

version: '3' services: nginx: container_name: myapp_nginx_development image: myapp_nginx_development ports: - 80:80 volumes: - ./nginx/myapp.conf:/etc/nginx/conf.d/myapp.conf - ./nginx/nginx.conf:/etc/nginx/nginx.conf tty: true app: container_name: myapp_app_development image: myapp_app_development environment: RAILS_ENV: development command: "bundle exec puma -C config/puma.rb" volumes: - ./src:/var/www/myapp ports: - 3000:3000 depends_on: - db - nginx tty: true db: image: mysql:8.0.28 container_name: myapp_db_development volumes: - ./etc/my.cnf:/etc/mysql/conf.d/my.cnf - myapp_data:/var/lib/mysql environment: MYSQL_ROOT_HOST: '%' MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD} command: --default-authentication-plugin=mysql_native_password ports: - 3306:3306 env_file: - .env tty: true volumes: myapp_data: external: true

puma.rb

ruby

workers Integer(ENV['WEB_CONCURRENCY'] || 2) max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } threads min_threads_count, max_threads_count preload_app! environment ENV.fetch("RAILS_ENV") { "development" } bind "unix:///var/www/myapp/tmp/sockets/puma.sock" pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } plugin :tmp_restart on_worker_boot do ActiveRecord::Base.establish_connection end

myapp.comf

upstream puma { server unix:///var/www/myapp/tmp/sockets/puma.sock; } server { listen 80; server_name localhost:3000; keepalive_timeout 0; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; client_max_body_size 4G; root /var/www/myapp/public; location ~ .*\.(swf|SWF|ico|ICO|jar|txt|gz|js) { root /var/www/myapp/public; expires 15m; break; } location ~ ^\/assets\/* { root /var/www/myapp/public; break; } location ~ ^/assets/|favicon.ico { root /var/www/myapp/app/assets/images; break; } location = /manifest.json { root /var/www/myapp/app/config; break; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; #auth_basic "Restricted"; #auth_basic_user_file /etc/nginx/.htpasswd; #if ($http_x_forwarded_proto = "http") { #rewrite ^(.*) https://$server_name$1 #break; #} proxy_pass http://puma; } }

よくあるエラーですが、puma.sockも意図した場所に存在しており長時間解決できずにいます。puma.sockへのアクセス制限等も考えましたが、前例を見つけることができずに困っています。

お手数お掛けしますが、よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

docker-compose

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

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

Docker

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