php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

dokcerでapache+phpのコンテナが立ち上がらなかった時のメモ

dokcerでapache+phpのコンテナが立ち上がらなかった時のメモ


正確にはdocker-composeでapache2.4+php5.5のコンテナとmysql5.5のコンテナを立ち上げる
この時にはまったことを残します。


docker-composeのファイル内容はapache2.4+php5.5・mysql5.5ともにすでにある自分用のベースイメージから
今回の作業ディレクトリにマウントしてサービスを起動するコマンドを記述したものです。

その際にapache2.4+php5.5のコンテナが立ち上がりませんでした。

立ち上がらなかったコンテナを

docker commit コンテナID 作成イメージ名(原因調査なので適当に)

できたイメージから

docker run --rm -it 作成イメージ名 sh

するとこんなエラーが出てきました

$ docker run --rm -it httpd_test sh
docker: Error response from daemon: cannot mount volume over existing file, file exists /var/lib/docker/overlay2/d09afadcb33cb0250cff89422a537f1c8e7af0c413976ce96a2c8a249db74cb0/merged/etc/httpd/conf/httpd.conf.
See 'docker run --help'.

とりあえずマウントしているパスが間違っていないdocker-composeファイルのマウント記述部分を確認
→間違えていない。

すでにイメージの中にファイルがあるのかとベースイメージを作成する時にhttpd.confを削除して再実行
→変わらず。。

ローカルのパーミッション?
→関係なかった

以前にも同様の環境を作成したことがあってdockerにキャッシュでも残っているのか?
→そうではなかった

今日docker for mac のアップデートがあったからか?
→一番怪しいと思っていてファイル単位でのマウントできなくなったのか?疑ったけどそうではなかった。

解決しました
結論的にベースイメージを作成する時にapache2.2のDockerfileをコピーしたんですけれど

ENTRYPOINT ["/usr/sbin/httpd","-D","FOREGROUND"]

って書いてあったんですね

それでdocker-composeファイルでは
command: bash -c "/usr/sbin/apachectl -D FOREGROUND"
って書いてあったものでこれが悪さしていたみたいです。
そもそも2.2と2.4の記述が混ざってしまっていた点と2重で起動コマンドを実行しようとしていたことがよくなかったんでしょうね。

ベースイメージ作成時の
ENTRYPOINT ["/usr/sbin/httpd","-D","FOREGROUND"]

これで起動できるようになりました。

翻訳すると
既存のファイル・ボリュームにマウントできません
このエラーのためにどハマりいたしました。。。

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする