🛠️
自作のdevcontainerからホストのGit情報を使用可能にした話
TL;DR
- 自作のdevcontainerではホストからのGit情報が引き継げない場合がある
- 以下のfeatureを
devcontainer.json
に追加する必要がある
はじめに
devcontainers公式が公開しているdevcontainerや、適切に設定されたdevcontainerではホストのGitに設定された情報を使用可能です。しかし自分でDockerfile
とdevcontainer.json
を書いて作った開発コンテナでは、適切に設定しないとホストのGit情報を使用できません。
使用していたコンフィグ
下記リポジトリで公開されているコンフィグを一部変更して使用
devcontainer.json
{
"name": "Hugo & pnpm",
"build": {
"dockerfile": "Dockerfile"
},
"remoteUser": "vscode"
}
Dockerfile
FROM mcr.microsoft.com/devcontainers/base:ubuntu
ARG DEBIAN_FRONTEND=noninteractive
ARG VARIANT=hugo_extended
ARG VERSION=0.142.0
RUN case ${VERSION} in \
latest) \
export VERSION=$(curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') ;;\
esac && \
echo ${VERSION} && \
case $(uname -m) in \
aarch64) \
export ARCH=ARM64 ;; \
*) \
export ARCH=64bit ;; \
esac && \
echo ${ARCH} && \
wget -O ${VERSION}.tar.gz https://github.com/gohugoio/hugo/releases/download/v${VERSION}/${VARIANT}_${VERSION}_Linux-${ARCH}.tar.gz && \
tar xf ${VERSION}.tar.gz && \
mv hugo /usr/bin/hugo
EXPOSE 1313
起こったこと
- コンテナ内で
git commit
等が使用できない - ↑の解決に毎回
user.name
やuser.email
をコンテナ毎に設定しなおすのが面倒 - 他の公式が公開しているコンテナでは使用できる
解決方法
公式が公開しているコンフィグを確認する
公式が公開しているdevcontainerだと、Git情報が引き継げることが事前に分かっていました。ソースコードは以下のリポジトリ内に存在するので、確認してどのようなコンフィグになっているか確認してみましょう。
今回は例としてdebianのdevcontainerを見てみます。
デフォルトで2つのfeatureを適用していることが分かりました。
このfeatureはGitの更新や、コンテナイメージ単体でgit
コマンドが使用できない場合を想定して追加されていると考えられます。Gitの更新/追加はコンテナによって必要か不要か判断してください。
公開されているコンテナでは適用されているため、今回はこちらのfeatureも併せて導入します。
自作のコンテナへ対応させる
お使いのdevcontainer.json
に下記項目を追加してください。
devontainer.json
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "true",
"username": "vscode",
"userUid": "1000",
"userGid": "1000",
"upgradePackages": "true"
},
"ghcr.io/devcontainers/features/git:1": {
"version": "latest",
"ppa": "false"
}
},
編集後はコンテナを再生成してください。
以上でコンテナの中からホストのGit情報が使用できると思います。
Discussion