Alpine LinuxでVS Code Serverを実行できないことがある
噛み砕いた前提条件の説明
このとき、
マシンAからマシンBに、VS CodeのRemote SSH拡張機能で接続できないことがある。
マシンAからマシンBのDev Containerに、Dev Containers拡張機能で接続できないことがある。
理由
マシンAからマシンBやマシンBのDev ContainerにVS Codeで接続したい場合は、マシンBにVS Code Serverがインストールされている必要がある。
VS Code Serverに同梱されているNode.jsがglibc前提の場合は、マシンBではそれが動作せず、マシンB上ではVS Codeの拡張機能を実行できない(ほとんどのことができない)。
対処法: VS Code Serverを実行するマシンでは、glibcを使っているLinuxディストリビューションを使う。
mgn901.iconの2025/5/28現在の環境の場合、
マシンBにRemote SSH拡張機能で接続できた。
マシンBにRemote SSH拡張機能で接続できた後は、マシンB上のDev ContainerにDev Containers拡張機能で接続することもできた。(成功例)
code:txt
# ここまで省略
899 ms Start: Run: docker inspect --type container happy_albattani 1107 ms Start: Check Docker is running # 省略(Docker Version Checkの結果が入る)
1254 ms Running Dev Containers CLI: set-up # 省略(引数が入る) 1254 ms Start: Checking for Dev Containers CLI 1342 ms Start: Run: /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/node /root/.vscode-remote-containers/dist/dev-containers-cli-0.413.0/dist/spec-node/devContainersSpecCLI.js set-up # 省略(引数が入る) 1578 ms @devcontainers/cli 0.76.0. Node.js v20.19.0. linux 6.8.0-60-generic x64. # 以下省略
マシンBにRemote SSH拡張機能で接続する前に、マシンB上のDev ContainerにDev Containers拡張機能で接続することはできない。(失敗例)
code:txt
# ここまで省略
4705 ms Start: Run: /bin/sh (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null 5520 ms Start: Run: mkdir -p /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e_1748392356409 5605 ms Start: Run: tar --no-same-owner -x --strip-components 1 -C /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e_1748392356409 34073 ms Start: Run: mv -n /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e_1748392356409 /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e 34183 ms Start: Run: docker inspect --type container happy_albattani # 省略(Docker Version Checkの結果が入る)
34682 ms Running Dev Containers CLI: set-up # 省略(引数が入る) 34683 ms Start: Checking for Dev Containers CLI 34702 ms Start: Copying Dev Containers CLI 34764 ms Start: Run: tar --no-same-owner -x -f - 35527 ms Start: Run: /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/node /root/.vscode-remote-containers/dist/dev-containers-cli-0.413.0/dist/spec-node/devContainersSpecCLI.js set-up # 省略(引数が入る) 35619 ms Error: CodeError(ProcessSpawnFailed(Os { code: 2, kind: NotFound, message: "No such file or directory" })) at Object.resolve (/Users/user0/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:295719)
at /Users/user0/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0/out/extension.js:2:294418
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
ログからわかる、成功例と失敗例の違い
失敗した方は、何かのtarballを取得して/root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2eに移動する動作を行っている。
失敗した方は、Copying Dev Containers CLIしている。
成功した方: /root/.vscode-server/cli/servers/Stable-848b80aeb52026648a8ff9f7c45a9b0a80641e2e/server/node
失敗した方: /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/node
/root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/nodeを実行してみた。
code:txt
$ /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/node
/bin/sh: /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/node: No such file or directory # おかしいなぁ、存在するはずなのに
$ bash # bashで実行したら何を言われるのだろう
$ /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/node
bash: /root/.vscode-remote-containers/bin/848b80aeb52026648a8ff9f7c45a9b0a80641e2e/node: cannot execute: required file not found # なにコレ???
「実行に必要なファイルが見つからない」というメッセージで、今回のようなケースだと、標準ライブラリが欠落していると考えるのが妥当かと。mgn901.icon
Docker in Dockerのための公式コンテナイメージのベースイメージはAlpine Linuxだった。