質問: /app/ディレクトリがRAILSのルートディレクトリでunicorn,rails構成でdockerにデプロイしてます。 unicron起動はsupervisorでやっててunicornのログを/app/tmpディレクトリ配下に出してます。 ここから問題ですが、ホストOSの/tmpディレクトリとコンテナの/appディレクトリを共有したく docker run -v /tmp/:/app するとなぜかsupervisordで/app/tmp/配下にログが出せないといって起動ができなくなります。(つまり/app/ディレクトリがないといってます。) それでdocker run -v /tmp:/app /bin/bashでコンテナ中見ると ホストOSの/tmpディレクトリがコンテナの/appディレクトリを上書きしてます。 このような現象になる理由がわかりません。 もしヒントになる原因などがありましたらアドバイスいただきたいです。
回答: > > それでdocker run -v /tmp:/app /bin/bashでコンテナ中見ると ホストOSの/tmpディレクトリがコンテナの/appディレクトリを上書きしてます。 > > > これが期待通りの動作となります。`docker run` の bind mount (`-v /host/dir:/docker/dir`) は、ホスト側のディレクトリをコンテナ側のディレクトリにマウントします(つまり、Kimsehwaさんが 前の質問 で言っていたとおりの理解で合ってます)。そのため、元々コンテナ側のマウント先のディレクトリ内にあったファイルやディレクトリは、隠れて見えなくなります。 私の知る限りでは、逆方向(コンテナ側 → ホスト側)にマウントする方法はありません。 ではどうやって、Docker イメージに元々あったディレクトリ(の内容)を、`docker run` の時に共有するかですが、今のところは、以下のようにするしかなさそうです: 1. `docker run -v /tmp/container1-app:/shared-app` などとして、ホスト側のディレクトリを、コンテナ側の `/app/` とは **別の** ディレクトリ `/shared-app/` にマウントする。 2. コンテナ内で `mv /app/* /shared-app/`(または、`cp -rp /app/* /shared-app/`)を実行し、共有したいディレクトリの内容を、マウントされたディレクトリに移動(または、コピー)する。 3. 使い終わった後(コンテナを削除した後)も、ホスト側の `/tmp/container1-app/` の中身は残るので、不要ならホスト側で削除する。