VSCode Remote Containerを使い始めたのですが、参画しているプロジェクトでは .devcontainer/ をgit管理していないため、リポジトリに影響がないようgitignoreしたいだけです。

はじめに

M1 Macへの移行を機に、フルDockerを目指して試行錯誤している内の一幕です。
Docker Desktopは使わずに、lima + Dockerで環境構築しています。
Remote Containersのバージョンは v0.209.6 です。

$ docker -v
Docker version 20.10.12, build e91ed5707e

$ docker-compose -v
Docker Compose version 2.2.3

$ lima -v
limactl version 0.8.0

Remote Containersで接続すると、特に設定しなくても ~/.ssh/known_hosts~/.gitconfig はコンテナ側にコピーされました。
なので、ホスト側で .gitconfigcore.excludesfile.gitignore_global を設定して、コンテナ側で .gitignore_global を配置して除外されるようにしていきます。

.gitignore_global

まずは、ホスト側の .gitconfig に以下の設定を追記します。

[core]
  excludesfile = ~/.gitignore_global

ホスト側に .gitignore_global はなくても問題なく使えるはずですが、一応追加しておきます。

.devcontainer/
docker-compose.override.*

コンテナ側の .gitignore_global は、Remote Containersの接続に使う docker-compose.yml で配置します。

services:
  app:
    command: |
      /bin/sh -c "echo '.devcontainer/' >> /root/.gitignore_global;
      echo 'docker-compose.override.*' >> /root/.gitignore_global;
      rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0';
      while sleep 1000; do :; done"

volumes でマウントすると、何故かコンテナ側がディレクトリになってしまうので、仕方なく command.gitignore_global を作成するようにしました。ついでに docker-compose.override.yml も除外しています。

.gitignore_global を使用せずに、 /root/.config/git/ignore に設定する方法もありますが、設定しても何故か反映されませんでしたので、苦肉でこのようにしています。

あとはコンテナをビルドし直せば配置されているはずです。
Command Palletから Rebuild Container で実行できます。

ビルド完了後、catコマンドで確認してみてください。

$ cat /root/.gitignore
.devcontainer
docker-compose.override.*

上記のような結果が返ってきたら、git status でも .devcontainer/ が除外されているはずです。

おわりに

おそらくもっといい方法はありそうだけどとりあえず満足〜