経緯
同じはずの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
kernelは共通ですよ。
@matyapiro31
そうですね、そもそも同じ環境が作れるという認識で使っていたので・・・
詳細が書かれていないのでなんとも言えませんが、テストが誤っている可能性があるように見えます。
というのも、もしarch環境のテストにおいてヌル文字を含むディレクトリ名を指定していれば作成できないからです。
aufsでバックスラッシュを使えるかを知らないので推測ですが、純粋にバックスラッシュを含んでいるからローカル環境で失敗したのではないでしょうか?
@aimof
テストはmkdirの結果を判定したものでした、結果が合わないので直接mkdirを両環境で試した結果でも差があったという状況でした、仮にテストが誤っていたとして、ローカル環境で失敗、開発環境で成功という状態が起きたこと自体が問題だと思います。
環境はどちらも昨年の9月に作られたもののようなので、ストレージドライバは、開発環境がdevicemapper, ローカル環境がaufsであるように見えます。 @horikeso さんご自身がおっしゃっているようにストレージドライバやファイルシステムが別なら違いが生じる事自体は自然なことであり、それは問題視されるべきことではありません。
@horikeso さんの目的がヌル文字を含むファイル作成のテストであるなら「ext4やntfsなどのlinuxファイルシステム上に塗る文字を含むディレクトリを作成できた」という事のほうがはるかに重要度が高いかと思いますが。