LoginSignup
4

More than 3 years have passed since last update.

docker -v と case-sensitive (大文字・小文字比較)

Last updated at Posted at 2017-07-26

前提

  • 開発PC
    • Mac
  • 開発動作環境
    • docker上のコンテナ
  • ソースの同期方法
    • hostのソースがあるディレクトリをdockerにmountして同期していた。

発生した問題

  • docker上で動いたphpファイルがサーバー(amazon linux)にデプロイした際にその読み込んでいるファイルがないと言うエラーが出て動かなくなってしまった。

原因

  • ファイルの大文字小文字をtypoしていたため、そんな名前のファイルはないと怒られた。

コード例

  • 同じディレクトリに index.phpTest.phpと言うファイルがある想定
  • index.php 正しいやつ


require_once 'Test.php';


echo 'hogehoge';
  • index.php typo

//ここのファイル名をtypo
require_once 'test.php';


echo 'hogehoge';
  • Test.phpの内容
echo "test ";

出力結果

  • docker
    • 動く。
test hogehoge
  • サーバーでの出力
    • サーバーではそんなファイルは読めないと怒られる。
Warning: require_once(Test.php): failed to open stream: No such file or directory in /home/www-data/public/index.php on line 4

Fatal error: require_once(): Failed opening required '.Test.php' (include_path='.:/usr/local/lib/php') in /home/www-data/public/index.php on line 4

原因追求

  • 原因がわかったのは良いけど、ローカルで大文字小文字区別しない状態でのエラーは怖いなーと原因調査

結論

  • macからhostからmountしたディスクが case-insensitiveだった。

調査

  • dockerのコンテナに入って df -T を実行してファイルシステムを確認したら、mountした/var/www/apposxfsになっていてmacの標準が大文字・小文字を区別しないのが原因だった。
  • コマンド結果 df.png

解決方法

  • case-sensitiveなボリュームを新たに切って、ソースをそこからmountするように変更すれば良いのかもしない(未実施)
  • でももっといい方法ありそうだなー誰か教えてください。

余談

  • mountしているだけなら当たり前といえば当たり前なんだけどもdockerだから大丈夫やろーと思ってので盲点だった。
  • ただadobe製品とかはcase-sensitiveだと動かないとか、逆にcase-insensitiveじゃないと動かないものもたくさんあるらしい・・・怖い。

参考URL

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4