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

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

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

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

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つです

Q&A

解決済

1回答

2034閲覧

docker-composeでコンテナが起動しない

jagaimo24

総合スコア1

unicorn

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

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つです

0グッド

0クリップ

投稿2020/06/22 09:22

前提・実現したいこと

https://qiita.com/E6YOteYPzmFGfOD/items/509dbabeb20bf2487283#1dockerfilerails
こちらの記事を参考に既存のrailsプロジェクトに開発環境を導入し、先日までは問題なく起動していたのですが、急にrailsコンテナが起動しなくなってしまいました。
初心者のためログを見てもよくわからず。どのあたりに問題がありそうでしょうか?
ご教授いただけましたら幸いです。

発生していエラーメッセージ

docker logs cafeapp_web_1 2020/06/22 08:59:49 Waiting for: tcp://db:3306 2020/06/22 08:59:49 Problem with dial: dial tcp 172.19.0.2:3306: connect: connection refused. Sleeping 1s 2020/06/22 08:59:50 Connected to tcp://db:3306 2020/06/22 08:59:51 Command exited with error: exit status 1 2020/06/22 09:00:07 Waiting for: tcp://db:3306 2020/06/22 09:00:07 Connected to tcp://db:3306 2020/06/22 09:00:08 Command exited with error: exit status 1
... db_1 | 2020-06-22T08:20:35.579120Z 0 [Note] - '::' resolves to '::'; db_1 | 2020-06-22T08:20:35.579215Z 0 [Note] Server socket created on IP: '::'. db_1 | 2020-06-22T08:20:35.581579Z 0 [Warning] 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 | 2020-06-22T08:20:35.592409Z 0 [Note] Event Scheduler: Loaded 0 events db_1 | 2020-06-22T08:20:35.593103Z 0 [Note] mysqld: ready for connections. db_1 | Version: '5.7.30' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) db_1 | 2020-06-22T08:20:36.461456Z 2 [Note] Got an error reading communication packets web_1 | 2020/06/22 08:22:50 Command exited with error: exit status 1 db_1 | 2020-06-22T08:22:50.893867Z 3 [Note] Got an error reading communication packets cafeapp_web_1 exited with code 1

docker-compose.yml

version: '3' services: db: image: mysql:5.7 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: - db-volume:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: root ports: - "3306:3306" web: build: . command: dockerize -wait tcp://db:3306 -timeout 20s bundle exec unicorn -p 3000 -c /app_name/config/unicorn.conf.rb volumes: - .:/app_name - bundle:/usr/local/bundle:delegated - tmp-data:/app_name/tmp/sockets - public-data:/app_name/public - /app/vendor - /app/tmp - /app/log - /app/.git ports: - "3000:3000" tty: true stdin_open: true links: - db nginx: build: context: ./nginx dockerfile: Dockerfile ports: - 80:80 restart: always volumes: - tmp-data:/app_name/tmp/sockets - public-data:/app_name/public links: - web volumes: public-data: tmp-data: mysql-data: db-volume: bundle:

Dockerfile

FROM ruby:2.5.3 ENV DOCKERIZE_VERSION v0.6.1 RUN apt-get update && \ apt-get install -y --no-install-recommends\ mariadb-client \ build-essential \ wget \ vim \ && wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ && apt-get install -y nodejs RUN mkdir /app_name ENV RUBYOPT -EUTF-8 ENV APP_ROOT /app_name WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle install ADD . $APP_ROOT

unicorn.conf.rb

$worker = 2 $timeout = 30 $app_dir = "/app_name" $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir $std_log = File.expand_path 'log/unicorn.log', $app_dir # set config worker_processes $worker working_directory $app_dir stderr_path $std_log stdout_path $std_log timeout $timeout listen $listen pid $pid # loading booster preload_app true # before starting processes before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin Process.kill "QUIT", File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end # after finishing processes after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end

nginx.conf

FROM nginx:stable RUN rm -f /etc/nginx/conf.d/* COPY nginx.conf /etc/nginx/conf.d/myapp.conf CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

Nginx

1upstream unicorn { 2 server unix:/app_name/tmp/sockets/.unicorn.sock fail_timeout=0; 3} 4 5server { 6 listen 80 default; 7 server_name localhost; 8 9 access_log /var/log/nginx/access.log; 10 error_log /var/log/nginx/error.log; 11 root /app_name/public; 12 13 client_max_body_size 100m; 14 error_page 404 /404.html; 15 error_page 505 502 503 504 /500.html; 16 try_files $uri/index.html $uri @unicorn; 17 keepalive_timeout 5; 18 19 location @unicorn { 20 proxy_set_header X-Real-IP $remote_addr; 21 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 22 proxy_set_header Host $http_host; 23 proxy_pass http://unicorn; 24 } 25}

試したこと

エラーメッセージ等で検索し、調べてみたのですが中々解決できず、
コンテナやイメージを削除して起動し直してみたのですが、解決できませんでした。
何卒、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

同じ環境で開発したことがないのですが、
今まで出来ていて、何もしていないのにいきなりできなくなるということは、dockerfileやdocker-compose.ymlが今回の原因ではない気がします。

今回の環境を作成する上で困った点はdbが立ち上がる前にunicornコマンドを実行しようとして、コネクションエラーがよく起きたことです。dockerizeを利用することによって解決することができました。

また、データ永続化にするときに/myproject/tmp/で最初に指定していたせいで、tmp/pidsも永続化されてコンテナのbuildやupを何度か繰り返しているとうまくサービスが終了しなかった時とかに、pidファイルが残ってエラーを起こしてました。volumeを削除して立ち上げなおすことが何度かありました。

添付していただいたサイトの最後のコメントの部分が近しいのではないかと思いました。
ざっくりでもいいので、起動のプロセスを理解されて、ログを見てみると何かわかるかもしれません。

理解せずにいろいろ試すのであれば、
docker-compose down
docker-compose up
をする。
上記でダメでれば、
永続化しているvolumeが怪しいので、
pidやsockなどを保存しているvolumeの削除してみるとかですかね。
docker volume rm tmp-dataなど。

あまりいい回答ではないですが、
何か参考になれば幸いです。

投稿2020/06/22 09:42

Cojiro

総合スコア539

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

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

jagaimo24

2020/06/23 08:57

ご回答ありがとうございます。 volumeを削除しただけではだめだったので、コンテナやイメージを全削除したみたら解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問