##【事象】
私用のMacでDockerコンテナをいじっていた時、Tomcatのコンテナのログをホスト側に吐かせたくなり、
ホストとコンテナ間で共有ディレクトリを設定しようとしたら、めっちゃ怒られて辛かったというお話。
■激おこメッセージ
$ sudo docker run -d -p 18080:8080 -v /work/tomcat-container/logs:/share/logs --name tomcat1 tomcat:latest /sbin/init
04d63c0ab435ddf746fd239e162d48d55055cba9378a0d6e247580de19039028
docker: Error response from daemon: Mounts denied:
The path /work/tomcat-container/logs
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
【やりたきこと】
ホスト側のボリューム /work/tomcat-container/log にログが流れるようにしてあげたい。
あわよくば、お叱り頂いた理由等も知りたく...。
【Let's 解析】
- docker run時のファイルパスはどちらも間違っていない
- ディレクトリ権限でも問題ない
-
メッセージを見ると、dockerのアプリがそもそもダメって言っていた。
##■ありがたきメッセージ
メッセージをもう一度読むともう答えが書かれていました。
なんとDockerアプリから環境設定で設定が必要なご様子です。
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
【詳細】
メッセージに従い一度きっちりドキュメントを拝見させて頂くと...?
https://docs.docker.com/docker-for-mac/osxfs/#namespaces
The user’s ~/Desktop/ directory is now visible in the container as a directory under /.
コンテナ側から見えてなかった理由がわかりましたね。
僕の作ったボリューム (/work/tomcat-container/logs) は、「/」始まりでした。
そりゃコンテナ側からは見れなくて当然な訳で御座います。
Docker for macのアプリで許可してあげたら無事、共有ディレクトリを設定できました〜。
[タブ:File Sharing]で、共有ディレクトリを設定可能
#【小ネタ】
Docker for Macのアプリに、許可するファイルパスを指定してあげれば余裕でOKな話でしたが、
僕は端末を汚したく無くて、terminalでいつも /work に色々sandboxを作って操作していました。
事件が起きたのは今回、/work のPATHを許可設定する時でした。
「/work って、Macでのファイルパスってどこなんだろう...?」
「選択できる対象にホストが...ない!?」
工エエエエエエェェェェェェ(゚Д゚)ェェェェェェエエエエエエ工工工
terminalにてhostnameをポチポチ...。
→Docker for Macのアプリを再度見る。
選択できる対象にホストは無いまま。
お通夜モード
「 /workは /work だったァーーーーー!!!!」
工エエエエエエェェェェェェ(゚Д゚)ェェェェェェエエエエエエ工工工
普段、仕事の端末(Windows)上のマシンで作業していたからこそ起きた悲劇...。