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

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

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

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

docker-compose

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

Ruby

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

Docker

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

Q&A

解決済

2回答

1809閲覧

【Docker・unicorn】pidファイルが消せない

miyu_wl

総合スコア1

unicorn

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

docker-compose

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

Ruby

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

Docker

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

0グッド

0クリップ

投稿2022/08/15 06:04

編集2022/08/15 06:42

発生している問題

unicorn を用いて web アプリを立ち上げるために docker-compose up -d を実行すると、以下のようなログが表示され、EXITされてしまいます。
Docker を強制的に終了させてしまったためにpidファイルが残ったままになっていることが原因だと考えられます。

terminal

1bundler: failed to load command: unicorn (/usr/local/bundle/bin/unicorn) 2/usr/local/bundle/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:206:in `pid=': Already running on PID:1 (or pid=/var/run/unicorn/unicorn.pid is stale) (ArgumentError)

試したこと

problem1ディレクトリ内で rm コマンドを用いて pid ファイルを消そうとしましたが、

  • /var/run/unicorn/unicorn.pid
  • /tmp/pids/server.pid
  • tmp/pids/server.pid

が存在せず、消すことができませんでした。

ディレクトリの構成

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#EXPOSE 4567 12 13CMD ["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 db: 33 image: mysql:latest 34 container_name: db 35 hostname: db 36 networks: 37 - back 38 volumes: 39 - ./mysql/my.cnf:/etc/mysql/my.cnf 40 - ./mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf 41 - ./mysql/0_init.sql:/docker-entrypoint-initdb.d/0_init.sql 42 environment: 43 MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' 44 MYSQL_DATABASE: app 45 TZ: "Asia/Tokyo"

--- unicorn.rb ---

ruby

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

--- config.ru ---

ru

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

どなたかご教授いただけますと幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下の質問文からの推測ですが

problem1ディレクトリ内で rm コマンドを用いて pid ファイルを消そうとしましたが、
...が存在せず、消すことができませんでした。

今回削除したいターゲットは/var/run/unicorn/unicorn.pidであって、problem1/*(正確には/app/problem1/*)ではありません。
立ち上げたコンテナの中に/var/run/unicorn/ディレクトリがあると思うので、その中を確認したでしょうか?
また、docker-compose.ymlを見るとvolumes:- socket:/var/run/unicorn/と設定されているので、ホストOS側のsocketディレクトリにunicorn.pidが存在するかもしれません。
コンテナに入って/var/run/unicorn/unicorn.pidを削除するか、ホストOS側でsocket/unicorn.pidを削除するかどちらかの方法があるような気がします。
コンテナに入る場合は、docker-compose.ymlのservices > apptty: trueを設定すれば指定したプロセス("bundle", "exec", "unicorn", "-c", "unicorn.rb")が落ちてもコンテナは生き残るはずです。
そこに接続ができます。

投稿2022/08/16 01:46

YuuT

総合スコア673

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

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

miyu_wl

2022/08/19 14:51

ご回答ありがとうございます。 tty: true と設定するとコンテナが落ちずに済むのですね。 コンテナに入り、/var/run/unicorn/unicorn.pid を削除すると無事動くようになりました。 とても助かりました。ありがとうございました。
guest

0

せっかくのdockerなので、全て削除してしまってはいかがでしょうか?

docker-compose down --rmi all --volumes --remove-orphans

投稿2022/08/15 14:30

TakaseHiromichi

総合スコア110

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

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

miyu_wl

2022/08/19 15:06

ご回答ありがとうございます。 なるほど、そういった手もあるのですね。 大変勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問