Closed5
devcontainer実行するとdocker desktopのコンテナ一覧にコンテナが表示されない

VSCodeのdevcontainerでpythonのコンテナを作って、起動はできるのだがdocker desktopのコンテナ一覧に表示されない現象が発生した。
プロセスを見るとqemu-system-x86_64上でpythonプロセスが動いているようでpython3のプロセスはホストOSで動作しているように見える。
-kernel /opt/docker-desktop/linuxkit/kernel
と表示されるので、docker containerのカーネルはdocker-desktopのものを使用しているらしい。
hoge 642302 65.3 32.2 15695196 10562064 ? Sl 21:36 6:00 qemu-system-x86_64
-accel kvm -cpu host -machine q35 -m 10240 -smp 6 -kernel
/opt/docker-desktop/linuxkit/kernel -append page_poison=1 vsyscall=emulate panic=1
nospec_store_bypass_disable noibrs noibpb no_stf_barrier mitigations=off
linuxkit.unified_cgroup_hierarchy=1
vpnkit.connect=tcp+bootstrap+client://
gateway.docker.internal:39385/40f152e3290dc1375f5e4626b9df5fd0974ac2faccbf93e6de4ee2fdc18dedba
vpnkit.disable=osxfs-data console=ttyS0 -initrd /opt/docker-desktop/linuxkit/initrd.img -serial pipe:/tmp/qemu-console634666822/fifo -drive if=none,file=/home/hoge/.docker/desktop/vms/0/data/Docker.raw,format=raw,id=hd0 -device virtio-blk-pci,drive=hd0,serial=dummyserial -netdev user,id=net0,ipv6=off,net=192.168.65.0/24,dhcpstart=192.168.65.9 -device virtio-net-pci,netdev=net0 -vga none -nographic -monitor none -object memory-backend-memfd,id=mem,size=10240M,share=on -numa node,memdev=mem -chardev socket,id=char0,path=virtiofs.sock0 -device vhost-user-fs-pci,queue-size=1024,chardev=char0,tag=virtiofs0
root 646326 99.6 0.5 640172 166560 pts/0 Rsl+ 21:44 1:16
/usr/local/bin/python3.11
/usr/local/bin/uvicorn langgraph_api.server:app
--log-config /api/logging.json --host 0.0.0.0 --port 8000
--no-access-log --timeout-graceful-shutdown 3600

docker engineが複数あるのが原因かなと思い、chatgptに調べ方を聞いた。
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock
desktop-linux * Docker Desktop unix:///home/hoge/.docker/desktop/docker.sock
複数のengineが表示される。

同様にVSCodeのローカル環境でdocker contextを調べるとdefaultになっている。おそらくここが原因。
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
desktop-linux Docker Desktop unix:///home/hoge/.docker/desktop/docker.sock
$ docker context show
default

VSCodeのワークスペースごとの設定であるところの .vscode/settings.json
に
DOCKER_HOST
を直打ちすれば動いた。
{
"docker.environment": {
"DOCKER_HOST": "unix:///home/hoge/.docker/desktop/docker.sock",
//"DOCKER_CONTEXT": "desktop-linux" こちらは設定しても動かない
}
}
-
DOCKER_CONTEXT
の方はおそらく Docker context from settings.json not applied to devcontainer #9039 で報告されているように動かない - あと、settings.jsonに環境変数を使用したいが、これもサポートされていないように見える
{
"docker.environment": {
// このように書きたいが、variable設定がなぜかsettings.jsonに限りサポートされていない
"unix://${env:HOME}/.docker/desktop/docker.sock"
}
}

設定を書く場所をdevcontainer.jsonに移動するとすべてが解決した。
どうやら、vscode本体側での環境変数ロードは実装される予定がないが、拡張機能側でやれということらしい。
devcontainer.json
{
"remoteEnv": {
"DOCKER_HOST": "unix://${env:HOME}/.docker/desktop/docker.sock",
"DOCKER_CONTEXT": "desktop-linux"
},
// その他の設定
}
このスクラップは2025/01/01にクローズされました