🐳

devcontainer内でDinDがうまく動かないときの対処法

2023/09/20に公開

GitHub Actionsを作ろうとして act を devcontainer 内で作ろうとしたところ、以下のようにDockerのエラーが表示されました。

[Check reviewers' approval/Checks if this action works]   🐳  docker pull image=catthehacker/ubuntu:act-latest platform= username= forcePull=true
[2023-09-20T05:40:59.922547000Z][docker-credential-desktop][F] get system info: exec: "sh": cannot run executable found relative to current directory
[goroutine 1 [running, locked to thread]:
[common/pkg/system.init.0()
[       common/pkg/system/os_info.go:32 +0x1bc
[Check reviewers' approval/Checks if this action works] Could not get auth config from docker config: error getting credentials - err: exit status 1, out: ``
Error: error getting credentials - err: exit status 1, out: ``;

以前はこんなことは無かったので、devcontainer周りのバージョンのせいかもしれませんが、以下の記事を参考にとりあえず ~/.docker/config.json を消してみました。

不思議なことにそれで解決。おそらく config.json 内の credsStore が悪さをしている気がします。

node@cb7eaf88d49c:/workspaces/reviewer-approve-required-action$ cat ~/.docker/config.json 
{
        "credsStore": "dev-containers-98e4f669-8c5c-4c07-ab67-1c7926f90090"
}

ヒントになりそうなIssueはあるものの、解決には至りませんでした。

https://github.com/microsoft/vscode-remote-release/issues/7982

当面はdevcontainer環境を作ったときでDinDをしたいときにはこの作業が必要になりそうです。とは言うものの、毎回やるのは面倒なので devcontainer.json を以下のように設定しました。

{
	"name": "Untitled Node.js project",
	"build": {
		"dockerfile": "Dockerfile"
	},
	"remoteUser": "node",
	"features": {
		"ghcr.io/dhoeric/features/act": {},
		"ghcr.io/devcontainers/features/docker-outside-of-docker": {}
	},
	"postCreateCommand": "rm ~/.docker/config.json"
}

Discussion