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

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

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

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

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回答

981閲覧

DockerでNginx、Unicorn、Rails環境を作った際に、再起動できなくなります。

naoki855

総合スコア75

unicorn

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

nginx

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

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2017/10/09 10:03

DockerでNginx、Rails、Unicorn、MySQLを使用して環境構築をしています。
ふつうに起動する分には問題ないのですが、例えば、

  • スリープモードにして、一旦Dockerが停止してしまった場合
  • Dockerfileに問題があって強制終了してしまった場合

上記のような場合に再度docker-compose upをして再起動するとRails (Unicorn)のコンテナでエラーが発生してしまいます。
もしくはNginxの方でupstream timed out (110: Connection timed out) while reading response header from upstreamのエラーが出て、Unicorn側に行っていません。
bundle exec unicornの前にUnicornを停止させるスクリプトを書いてみましたが、うまくいかず。。。
(書き方が悪かったのかもしれませんが。。。)

もし同様にDockerで環境を作られている方がいたら、このようなケースに対応している方法などを教えていただけないでしょうか?

下記に現在のDockerfile、およびdocker-compose.ymlのコードを記載します。
よろしくお願いします。

docker-compo.yml
version: '2' services: datastore: build: context: . dockerfile: ./docker/datastore/Dockerfile server: build: context: . dockerfile: ./docker/nginx/Dockerfile ports: - 80:80 volumes_from: - datastore depends_on: - datastore web: build: context: . dockerfile: ./docker/rails/Dockerfile command: bundle exec unicorn -p 3000 -c /app/config/unicorn/development.rb" ports: - 3000:3000 volumes: - .:/app volumes_from: - datastore depends_on: - db links: - db - db:database - db:mysql extends: file: ./docker/mysql/password.yml service: password db: build: context: . dockerfile: ./docker/mysql/Dockerfile ports: - 3306:3306 volumes_from: - datastore depends_on: - datastore extends: file: ./docker/mysql/password.yml service: password
Nginx
FROM nginx:1.13 RUN apt-get update && \ apt-get install -y apt-utils \ locales && \ sed -i -e 's/# ja_JP.UTF-8/ja_JP.UTF-8/g' /etc/locale.gen && \ locale-gen ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LC_TIME C ADD ./docker/nginx/nginx.conf /etc/nginx/nginx.conf

nginx

1# docker/nginx/nginx.conf 2user nginx; 3worker_processes 1; 4 5error_log /var/log/nginx/error.log warn; 6pid /var/run/nginx.pid; 7 8events { 9 worker_connections 1024; 10} 11 12http { 13 include /etc/nginx/mime.types; 14 default_type application/octet-stream; 15 16 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 17 '$status $body_bytes_sent "$http_referer" ' 18 '"$http_user_agent" "$http_x_forwarded_for"'; 19 20 access_log /var/log/nginx/access.log main; 21 22 sendfile on; 23 tcp_nopush on; 24 25 upstream unicorn { 26 server unix:/share/unicorn.sock; 27 } 28 29 server { 30 listen 80; 31 32 proxy_buffers 64 16k; 33 proxy_max_temp_file_size 1024m; 34 35 proxy_connect_timeout 5s; 36 proxy_send_timeout 10s; 37 proxy_read_timeout 10s; 38 39 location / { 40 try_files $uri $uri/ @app; 41 } 42 43 location @app { 44 proxy_set_header Host $host; 45 proxy_set_header X-Forwarded-Host $host; 46 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 47 proxy_set_header X-Forwarded-Proto $scheme; 48 49 proxy_pass http://unicorn; 50 } 51 } 52 53 54 keepalive_timeout 65; 55 #gzip on; 56 include /etc/nginx/conf.d/*.conf; 57}
Datastore
# docker/datastore/Dockerfile FROM busybox:latest VOLUME /share VOLUME /var/lib/mysql CMD /bin/sh
Ruby
FROM ruby:2.4.1 RUN apt-get update -qq RUN apt-get install -y build-essential libpq-dev nodejs mcrypt libmcrypt-dev git RUN apt-get install -y qt5-default libqt5webkit5-dev gstreamer1.0-plugins-base gstreamer1.0-tools gstreamer1.0-x RUN mkdir /app WORKDIR /app ADD Gemfile /app/Gemfile ADD Gemfile.lock /app/Gemfile.lock RUN bundle install ADD . /app

ruby

1# unicorn.rb 2worker_processes 8 3 4pid "/var/run/unicorn.pid" 5listen "/share/unicorn.sock" 6 7stdout_path "./log/unicorn.stdout.log" 8stderr_path "./log/unicorn.stderr.log"
MySQL
FROM mysql:latest RUN apt-get update RUN apt-get install -y locales RUN rm -rf /var/lib/apt/lists/* ENV LC_ALL ja_JP.UTF-8 ADD ./docker/mysql/charset.cnf /etc/mysql/conf.d/charset.cnf

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

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

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

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

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

guest

回答1

0

自己解決

自己解決というわけではありませんが、docker-compose upから少し時間を置いてアクセスした際に起動を確認しました。

投稿2017/10/12 14:25

naoki855

総合スコア75

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問