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

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

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

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

Docker

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

Q&A

2回答

2436閲覧

【docker-compose】DockerのUbuntuにPHP-FPMをインストールして起動させたい

nnahito

総合スコア2004

docker-compose

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

Docker

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

0グッド

0クリップ

投稿2021/11/12 04:55

背景

ubuntuサーバでプロダクトを動かしたいので、
開発環境であるDocker環境もubuntuにしたいと考えています。

困っていること

コンテナが起動してすぐにexitされる

該当コード

Dockerfile

1FROM ubuntu:latest 2 3RUN apt update -y 4 5# 言語を日本語に 6RUN apt install -y language-pack-ja-base language-pack-ja 7RUN locale-gen ja_JP.UTF-8 8 9# PPAを有効にする 10RUN apt install -y software-properties-common 11RUN add-apt-repository ppa:ondrej/php 12RUN apt update -y 13 14# PHPのインストール 15RUN apt install -y php8.0 php8.0-fpm 16 17# 必要なPHPモジュールをインストール 18RUN apt install -y php8.0-gd php8.0-xml php8.0-soap php8.0-mbstring php8.0-mysql 19 20CMD /etc/init.d/php8.0-fpm -F

エラー内容

Usage: /etc/init.d/php-fpm8.0 {start|stop|status|restart|reload|force-reload}

コマンドの使い方が違うようなので以下のように書き換えました。

Dockerfile

1FROM ubuntu:latest 2 3RUN apt update -y 4 5# 言語を日本語に 6RUN apt install -y language-pack-ja-base language-pack-ja 7RUN locale-gen ja_JP.UTF-8 8 9# PPAを有効にする 10RUN apt install -y software-properties-common 11RUN add-apt-repository ppa:ondrej/php 12RUN apt update -y 13 14# PHPのインストール 15RUN apt install -y php8.0 php8.0-fpm 16 17# 必要なPHPモジュールをインストール 18RUN apt install -y php8.0-gd php8.0-xml php8.0-soap php8.0-mbstring php8.0-mysql 19 20COPY ./files/entrypoint.sh /home/entrypoint.sh 21RUN chmod 755 /home/entrypoint.sh 22 23ENTRYPOINT /home/entrypoint.sh

エラー内容

run: 1: /home/entrypoint.sh: not found

entrypoint.shの中身

sh

1/etc/init.d/php8.0-fpm start

COPY ./files/entrypoint.sh /home/entrypoint.sh部分ではエラーは出ていないので、
コピー自体はできていると思います。
しかしファイルがないと言われます。

質問

このように、ubuntuイメージでPHP-FPMを起動させるにはどのようにすればよろしいでしょうか?
ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。

よろしくお願いいたします。

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

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

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

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

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

surface_0

2021/11/12 07:55

掲載されているコードをコピペしてそのままbuildおよびrunしてみましたが。 エラーは起きず再現できませんでした。 一応、開発環境や実行コマンドも載せていただけますでしょうか。
nnahito

2021/11/13 13:51

ご覧頂き誠にありがとうございます。 GitHubにコード全体をPushいたしましたので、もしよろしければご覧いただけますと幸に存じます。 https://github.com/nnahito/web-ubuntu-docker/ よろしくお願いいたします。
surface_0

2021/11/15 03:06

リポジトリをクローンしてdocker-compose up したところphp-fpmに関しては ``` web-ubuntu-docker_phpfpm_1 exited with code 0 ``` としか出力されず、提示されているエラーは出ませんでした。 php-fpmを動かすにあたって根本的な問題は別にあるので、エラーについては触れずに回答してよいでしょうか?
nnahito

2021/11/17 14:35

おそらくdocker-compose logsの上部に出ていると思います・・・ はい、エラーに触れずご回答いただけるとこちらもヒントになるかもしれないので、ありがたいです
guest

回答2

0

再確認しましたがやはりログにエラーは出ませんでした。
phpfpmだけ無言終了してしまいます。
しかし、それは想定通りです。
エラーが出る件については再現できなかったので割愛しますが、根本的に解決すべき点があるのでご提示します。

/etc/init.d/php8.0-fpm start

こちらのスクリプトはUbuntuにおいてPHP-FPMを立ち上げる通常の手順として使用できますが、
問題はバックグラウンドのデーモンとして起動することです。

Dockerはメインプロセスが終了するとコンテナは終了してしまうので、
バックグラウンドプロセスだけ起動するシェルスクリプトを実行しても、スクリプトを抜けると即座にコンテナは停止してしまいます。
docker run -itdocker-compose runを使って起動した場合は仮想端末がアタッチされるのでシェルがコマンド待機状態になり、自動では終了はしません)

他のnginxやmysqlや公式のphp-fpmイメージの構造を探ればわかると思いますが、
どれもデーモンではなくフォアグラウンドで実行することで、サーバーとして動作することができています。
やはり自前であしらったイメージでPHP-FPMを起動する場合にも同様にフォアグラウンドで実行するコマンドを組み込む必要があります。

ちなみにUbuntuでフォアグラウンドでphp-fpm8.0を動かす場合は-Fオプションで実行できます。

$ php-fpm8.0 -F

なお、/etc/php-fpm.d/www.confに設定ファイルを置いているようですが、
提示されているDockerfileによる構成ですと、設定ファイルのパスは/etc/php/8.0/fpm/php-fpm.confが正しいものとなります。
これにはdaemonizeの項目が記入されて無いため、-Fオプションを付けないと勝手にデーモンとして起動しますが、daemonize = noになっていればオプションは不要になります。

参考:PHP: 設定 - Manual

投稿2021/11/18 02:56

編集2021/11/18 03:07
surface_0

総合スコア497

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

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

0

エラーの通り、copyできていない気がします。

docker build のログ貼って欲しいです。

あとエラーとなるコードを外して、docker runでcontainerに入って、copyできているかを確認する方法もあります。

この辺のコードを一旦外して、copyできてるかを確認する

RUN chmod 755 /home/entrypoint.sh ENTRYPOINT /home/entrypoint.sh

投稿2021/11/15 05:55

heroyct

総合スコア434

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

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

nnahito

2021/11/17 14:34

ご回答有り難うございます。 > docker build のログ貼って欲しいです。 こちら再ビルド時に貼らせていただきます。 > この辺のコードを一旦外して、copyできてるかを確認する Copyできるか確認する、とおっしゃっていますが、 Copyが失敗した際エラーでビルドが止まるかと思います。 こちら、エラーが出ずそのままビルドが終了するのですが、 どのようにして確認すればよろしいでしょうか? 例えば、ls -laなど入れても最近のバージョンでは表示されないようで・・・
surface_0

2021/11/18 03:13

docker-compose run --entrypoint /bin/bash phpfpm でENTRYPOINTをオーバーライドできるので、コンテナを単体起動してシェルにアタッチできます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問