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"]
これで起動できるようになりました。
翻訳すると
既存のファイル・ボリュームにマウントできません
このエラーのためにどハマりいたしました。。。
コメント
コメントを投稿