我尝试在 VSCode 中使用 devcontainer 运行一个项目(模式:在没有缓存的情况下重建并在容器中重新打开),但收到此错误:
[2024-05-20T19:27:02.595Z]
[2024-05-20T19:27:02.596Z] Stop (10 ms): Run in container: test -x '/root/.vscode-server/bin/dc96b837cf6bb4af9cd736aa3af08cf8279f7685/bin/helpers/check-requirements.sh'
[2024-05-20T19:27:02.598Z] Start: Run in container: '/root/.vscode-server/bin/dc96b837cf6bb4af9cd736aa3af08cf8279f7685/bin/helpers/check-requirements.sh'
[2024-05-20T19:27:02.735Z]
[2024-05-20T19:27:02.738Z]
[2024-05-20T19:27:02.738Z] Exit code 1
[2024-05-20T19:27:02.738Z] Stop (140 ms): Run in container: '/root/.vscode-server/bin/dc96b837cf6bb4af9cd736aa3af08cf8279f7685/bin/helpers/check-requirements.sh'
[2024-05-20T19:27:02.783Z] Command in container failed: '/root/.vscode-server/bin/dc96b837cf6bb4af9cd736aa3af08cf8279f7685/bin/helpers/check-requirements.sh'
[2024-05-20T19:27:02.786Z] Exit code 1
我的 VSCode 信息:
Version: 1.89.1
Commit: dc96b837cf6bb4af9cd736aa3af08cf8279f7685
Date: 2024-05-07T05:14:24.611Z (1 wk ago)
Electron: 28.2.8
ElectronBuildId: 27744544
Chromium: 120.0.6099.291
Node.js: 18.18.2
V8: 12.0.267.19-electron.0
OS: Darwin x64 21.6.0
我尝试使用这些 DevContainer 版本:0.366.0、0.354.0
有人也有这个问题吗?有谁知道如何解决吗
OBS: 我正在使用 distroless docker 映像(到 python)。使用常规 docker 映像,我可以运行 devcontainer。
不建议使用 distroless docker 镜像来运行 Dev Container。
这是关于原因的完整解释(参考这里):
Distroless 镜像是最小镜像,不包含包管理器、shell 或您期望在标准 Linux 发行版中找到的任何其他程序。这对于安全性来说非常有用,但是当您需要在容器内安装其他软件或调试问题时,这可能会让事情变得困难。
开发容器功能依赖于某些可用的实用程序 容器,例如执行命令和脚本的 shell。如果 这些实用程序不可用,就像 distroless 的情况一样 图片,您可能会遇到问题。
您看到的错误消息表明 check-requirements.sh 脚本失败,因为找不到 shell 运行脚本。这是 distroless 镜像的预期行为, 因为它们不包含外壳。
如果您需要无发行映像的安全优势,您可能会 考虑使用多阶段 Docker 构建。在第一阶段,您可以 使用功能齐全的基础映像来编译您的应用程序并安装 依赖关系。第二阶段,可以复制编译好的 应用程序从第一阶段变成无发行镜像。这边走, 您无需牺牲开发人员即可获得最小的运行时映像 经验。
但是,使用 distroless 镜像作为 DevContainer 基础镜像并不适用 推荐,因为它可能会因缺失而导致问题 公用设施。