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

経緯

同じはずの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

445contribution

kernelは共通ですよ。

129contribution

@matyapiro31
そうですね、そもそも同じ環境が作れるという認識で使っていたので・・・

202contribution

詳細が書かれていないのでなんとも言えませんが、テストが誤っている可能性があるように見えます。

というのも、もしarch環境のテストにおいてヌル文字を含むディレクトリ名を指定していれば作成できないからです。

aufsでバックスラッシュを使えるかを知らないので推測ですが、純粋にバックスラッシュを含んでいるからローカル環境で失敗したのではないでしょうか?

129contribution

@aimof
テストはmkdirの結果を判定したものでした、結果が合わないので直接mkdirを両環境で試した結果でも差があったという状況でした、仮にテストが誤っていたとして、ローカル環境で失敗、開発環境で成功という状態が起きたこと自体が問題だと思います。

202contribution

環境はどちらも昨年の9月に作られたもののようなので、ストレージドライバは、開発環境がdevicemapper, ローカル環境がaufsであるように見えます。 @horikeso さんご自身がおっしゃっているようにストレージドライバやファイルシステムが別なら違いが生じる事自体は自然なことであり、それは問題視されるべきことではありません。

@horikeso さんの目的がヌル文字を含むファイル作成のテストであるなら「ext4やntfsなどのlinuxファイルシステム上に塗る文字を含むディレクトリを作成できた」という事のほうがはるかに重要度が高いかと思いますが。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.