はじめに
この記事は MicroAd Advent Calendar 2021 の 12 日目の記事です。
疑問
webサーバーのリプレイスの際にコンテナ化を行っていました。
何個か設置している静的ファイルはイメージ化して、データボリュームとしてwebサーバのコンテナに共有する想定。
色々試してる中で、1つのディレクトリに複数のボリュームのファイルの中身を設置(mount)したいと思う場面がありました。
ただ、その場合の挙動が想像がつかず、「各ボリュームのファイルが競合していたらどうなる?ディレクトリの中にボリュームのファイルをいい感じに設置してくれる?」という疑問になったので確認してみました。
確認
ファイル構成
version: "3"
services:
ab:
image: busybox:latest
volumes:
- a_volume:/test/
- b_volume:/test/
a_volumeの中にはa
, ab
b_volumeの中にはb
, ab
というファイルを作成しています
実行
上記のdocker-compose.yml
を実行
エラーが発生したのでマウントも実行されなかった。
ERROR: Duplicate mount points: [a_volume:/test:rw, b_volume:/test:rw]
## 終わりに
疑問を持ったので試したわけですが、エラー一つで終わってしまうと少し悲しいものがあります・・・
とはいえ、他の人もほとんど記事に書いていないエラーを踏めたのでいい勉強にはなりました。
もしかして、Dockerの裏ではoverlayFSが動いてるらしいのでlinuxのmount
コマンドと同じ挙動をしている?
と次の疑問を持ってしまったのでmountコマンドの動作を確認してみましたが、どうやら違うようです。
同じmountpointに複数のディレクトリをbindしてもエラーが出ず、変更を加えた後unmount -a
を実行すると最後にmountしたディレクトリにだけ変更が適応されていました。何も分からない。
linuxとdockerと和解するのはまだ時間がかかりそうです。