Closed5

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

hangedmanhangedman

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
hangedmanhangedman

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が表示される。

hangedmanhangedman

同様に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
hangedmanhangedman

VSCodeのワークスペースごとの設定であるところの .vscode/settings.json
DOCKER_HOST を直打ちすれば動いた。

{
    "docker.environment": {
        "DOCKER_HOST": "unix:///home/hoge/.docker/desktop/docker.sock",
        //"DOCKER_CONTEXT": "desktop-linux"  こちらは設定しても動かない
    }
}
{
    "docker.environment": {
        // このように書きたいが、variable設定がなぜかsettings.jsonに限りサポートされていない
        "unix://${env:HOME}/.docker/desktop/docker.sock"
    }
}
hangedmanhangedman

設定を書く場所をdevcontainer.jsonに移動するとすべてが解決した。
どうやら、vscode本体側での環境変数ロードは実装される予定がないが、拡張機能側でやれということらしい。

devcontainer.json
{
  "remoteEnv": {
    "DOCKER_HOST": "unix://${env:HOME}/.docker/desktop/docker.sock",
    "DOCKER_CONTEXT": "desktop-linux"
  },
  // その他の設定
}

https://code.visualstudio.com/remote/advancedcontainers/environment-variables

このスクラップは2025/01/01にクローズされました