Gatsby Logo

docker-composeのvolumesはマウント先を上書きする

2018-09-27

作ってから放置してたブログをちゃんと更新してこうと思います。 とあるGoプロジェクトでDocker環境を構築していたところ、プルリクのレビューでこんな指摘を受けました。

「作ってくれたREADMEに依存関係をインストールするコマンド書いてなくない?」

あら?てかそもそもインストールコマンドを打つ必要ないと思うんだけど。 Goのイメージをビルドしている時にちゃんとインストールしているはずです。 具体的に言うとDockerfileの最後の方にdep ensureを実行しているんです。 実際、depでマイグレーションツールを取得してgo installでインストールしていました。 確認のためにgit cloneしてはじめからやってみると、イメージをビルドしてコンテナを起動した時点で確かにvendorディレクトリが存在しません。なんでや。 docker-compose.ymlを眺めていると、volumesの部分に目が止まりました。

「もしかして、マウントする時にディレクトリを上書きしてる?」

そう思い、コンテナ内でファイルが存在する適当なディレクトリに対してホスト側の適当なディレクトリをマウントしてみるとやはりファイルが全て上書きされていますね。 マジかよ。ファイルが存在する場合はマウントエラーにしないのかよ。ファイル名が競合しない限りは両方存在し続けると勝手に思っていた自分もおかしいけど、普通はエラー出すでしょ。ほら、composerみたいに。 なので言われた通りREADMEにdep ensureしてねと書いて問題は解決しました。

思い込みって怖いね。。。