🛠️

自作のdevcontainerからホストのGit情報を使用可能にした話

2025/01/31に公開

TL;DR

  • 自作のdevcontainerではホストからのGit情報が引き継げない場合がある
  • 以下のfeatureをdevcontainer.jsonに追加する必要がある

https://github.com/devcontainers/features/tree/main/src/common-utils

はじめに

devcontainers公式が公開しているdevcontainerや、適切に設定されたdevcontainerではホストのGitに設定された情報を使用可能です。しかし自分でDockerfiledevcontainer.jsonを書いて作った開発コンテナでは、適切に設定しないとホストのGit情報を使用できません。

使用していたコンフィグ

下記リポジトリで公開されているコンフィグを一部変更して使用

https://github.com/nafnix/devcontainers-templates

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.nameuser.emailをコンテナ毎に設定しなおすのが面倒
  • 他の公式が公開しているコンテナでは使用できる

解決方法

公式が公開しているコンフィグを確認する

公式が公開しているdevcontainerだと、Git情報が引き継げることが事前に分かっていました。ソースコードは以下のリポジトリ内に存在するので、確認してどのようなコンフィグになっているか確認してみましょう。

今回は例としてdebianのdevcontainerを見てみます。

https://github.com/devcontainers/images/tree/main/src/base-debian

https://github.com/devcontainers/images/blob/main/src/base-debian/.devcontainer/devcontainer.json#L6-L17

デフォルトで2つのfeatureを適用していることが分かりました。

https://github.com/devcontainers/features/tree/main/src/common-utils

https://github.com/devcontainers/features/tree/main/src/git

この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