ブラックボックス

プログラミングのノウハウやライフハックをどんどん投稿していきたい

Feb 5, 2024 - 3 minute read - ノウハウ

【VSCode】DevContainerで「コンテナーは、VS Codeサーバーのすべての要件を満たしているわけではありません。」と表示されて起動できない

タイトルが長い。

……

最近はVSCode + DevContainerで開発だったり遊ぶことが多いですが、一部のコンテナで以下のようなエラーが出てしまいVSCodeでコンテナが開けなくなってしまいました。
コンテナーは、VS Codeサーバーのすべての要件を満たしているわけではありません。
ちなみに英語だと"The container does not meet all the requirements of the VSCode Server."
The container does not meet all the requirements of the VSCode Server."

こうなったのはVSCodeのバージョンアップをしてからで、その辺りが原因のようだったので色々見ていくことにしました。

環境

  • VSCode: 1.86.0

エラーについて

VSCodeで開こうとしていたコンテナはAmazon Linux2のコンテナでした。
ダイアログを見ると、glibcxxglibcがダメと書いてあるように読める。
詳細情報のURLは以下なので読んでみる。
Remote Development FAQ - Can I run VS Code Server on older Linux distributions?

上記ページには以下のような記述がある。

Starting with VS Code release 1.86, the minimum requirements for the build toolchain of the remote server were raised. The prebuilt servers distributed by VS Code are compatible with Linux distributions based on glibc 2.28 or later, for example, Debian 10, RHEL 8, Ubuntu 20.04.

VSCode1.86からはコンテナ内のglibcのバージョンが2.28以降でないと起動が出来なくなったとのこと。
起動しようとしたAmazon Linux2はglibc 2.26なので最小要件を満たしていない。

セキュリティ的に分かるんだが、Amazon Linux2は2024年2月時点ではまだEOLを迎えていないOSなので使えないと困る、ということで解決策を記載する。

解決策

先のページでは以下の2つが紹介されている。

  • Portable版のVSCodeで過去バージョンを使用
  • Web版のVSCode(Visual Studio Code for the Web)でパラメータをつけて起動

Portable版

Portable版とはZIPやtar.gzなどのインストール不要な形式。

参考: Portable Mode

VSCodeの過去バージョンは以下のページにてOS・CPU毎に一覧が記載されている。
Remote Development FAQ - Previous release versions

この中から自身のOS・CPUに合ったものを選択する。
1.86以前の最新版は1.85.2なので、URLの{version}1.85.2にするか、自身の使いたいバージョンに書き換えればよい。

Web版

Web版とはブラウザ上で実行可能なVSCode。

参考: Visual Studio Code for the Web

先のページに書かれている通り、Web版のVSCodeのURLに?vscode-version=0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2といったパラメータをつければ良い。

パラメータをつけたものが以下。
Visual Studio Code for the Web

上記URLではバージョン1.85.1が起動した。
Web版VSCode

おわりに

ひとまずDevContainerが起動できるような回避策は記載しました。
が、過去バージョンでは新機能が使えなかったりセキュリティリスクがあったりするので、注意が必要です。
そもそもglibcのバージョン問題で起動できないコンテナはEOLを迎えたOSが多いと思うので、コンテナのOS更新をした方がよさそうです。

と言っても色々な制約があって中々出来ないってことが多いんですけどね。