作ってから放置してたブログをちゃんと更新してこうと思います。 とあるGoプロジェクトでDocker環境を構築していたところ、プルリクのレビューでこんな指摘を受けました。
「作ってくれたREADMEに依存関係をインストールするコマンド書いてなくない?」
あら?てかそもそもインストールコマンドを打つ必要ないと思うんだけど。
Goのイメージをビルドしている時にちゃんとインストールしているはずです。
具体的に言うとDockerfileの最後の方にdep ensure
を実行しているんです。
実際、depでマイグレーションツールを取得してgo install
でインストールしていました。
確認のためにgit clone
してはじめからやってみると、イメージをビルドしてコンテナを起動した時点で確かにvendorディレクトリが存在しません。なんでや。
docker-compose.ymlを眺めていると、volumesの部分に目が止まりました。
「もしかして、マウントする時にディレクトリを上書きしてる?」
そう思い、コンテナ内でファイルが存在する適当なディレクトリに対してホスト側の適当なディレクトリをマウントしてみるとやはりファイルが全て上書きされていますね。
マジかよ。ファイルが存在する場合はマウントエラーにしないのかよ。ファイル名が競合しない限りは両方存在し続けると勝手に思っていた自分もおかしいけど、普通はエラー出すでしょ。ほら、composerみたいに。
なので言われた通りREADMEにdep ensure
してねと書いて問題は解決しました。
思い込みって怖いね。。。