Edited at

Dockerは同じ環境を作れるという安易な認識は間違っていた。

More than 1 year has passed since last update.


経緯

同じはずのDockerコンテナなのにローカル環境とテスト環境でテスト結果が異なっていた。

ファイル操作をするテストケースでLinuxでダメ文字といわれている\0や/周りでファイル・フォルダを作成するテストケースを書いていたところ

ローカル環境ではテストが通る(作成に失敗)開発環境ではテストが失敗した(作成に成功)


開発環境

Arch Linux

cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

uname -r

4.13.8-1-ARCH


ローカル環境

DockerToolbox

cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

uname -r

4.4.89-boot2docker


結論

OSのベースになっているファイルシステム等までは同じにならないのでカーネルのバージョンも合わせるようにした方が良さそうですが、簡単にできそうにないので、ファイルシステム等に依存する処理は行わないほうが良さそうです。


追記

ストレージドライバの設定をデフォルトではなく設定してファイルシステムを揃えてやるという手もあるかもしれませんね、しかし、これだと毎回気にしないといけないので「思考停止で同じ環境ができる!」とはいきませんが。

http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html#stability

ディストリビューションの標準ストレージ・ドライバを使います 。

Docker をインストールする時、システム上の設定に応じてデフォルトのストレージ・ドライバを選択します。
デフォルトのストレージ・ドライバの使用は、安定性に対する重要な要素になります。
デフォルトのものを使わなければ、バグや微妙な差違に遭遇する可能性が増えるかもしれません。


参考

http://x68000.q-e-d.net/~68user/unix/pickup?%A5%D5%A5%A1%A5%A4%A5%EB%C0%A9%B8%C2%A4%DE%A4%C8%A4%E1

http://docs.docker.jp/engine/userguide/storagedriver/selectadriver.html