VSCodeのRemote Containerでdotfilesを引き継ぐ方法

作成: 2020年08月16日

更新: 2021年04月24日

VSCodeのRemote Containers拡張

VSCodeのRemote Containers拡張ではVSCodeを起動するだけでそのディレクトリ内のDockerfileに従ってDockerを起動し,あたかもローカルで作業しているようにDocker内で作業することができ,ローカルの環境を汚さずに新しい環境を気軽に試せる.

Dotfilesの引き継ぎ

ここではRemote Containers拡張の導入は割愛するが,Remote Containers拡張をそのまま使うとローカルの.bash_profileやらのいわゆるdotfilesが引き継がれずalias等をローカルと同等に使用できない.
そこでVSCodeでは設定でGitで管理しているdotfilesをDockerコンテナ作成時にコピーすることができる.
(https://code.visualstudio.com/docs/remote/containers#_personalizing-with-dotfile-repositories)
以下のように設定からDockerコンテナ作成時に実行するスクリプト,dotfilesのリポジトリ,リポジトリをCloneする場所を指定できる.
dotfiles.png
自分の場合はDockerコンテナ作成時に以下のスクリプトを実行し,.bash_profileのシンボリックリンクを作成している.

#!/bin/sh
ln -sf ~/dotfiles/devcontainer/.bash_profile ~/.bash_profile

なお.gitconfigに関してはデフォルトでローカルのものがコピーされるので引き継ぐ必要はない.
また install.sh not executable や Permission denied でDockerコンテナ作成時に実行するスクリプトが実行されないことがある.これはGitリポジトリにpushする際にデフォルトでファイルのPermissionが644にされてしまうためである.
実行したいスクリプトに対して以下を実行して実行権限を付与してからpushすると実行できるようになる.

git update-index --add --chmod=+x [filename]

なぜか引き継がれないとき

ベースイメージによってはdotfilesのcloneができないときがある.この場合gitのpushなどもできない.debianベースのイメージならば以下のようにDockerfileでca-certificatesをインストールすれば問題は解消される.
node イメージの例

DockerfileFROM node:14.16.1-slim

RUN apt update \
    && apt install -y --no-install-recommends \
    apt-utils \
    git \
    ca-certificates \
    procps \
    && apt autoremove -y \
    && apt clean -y \
    && rm -rf /var/lib/apt/lists/*