重载或扩展开发容器配置文件(“devcontainer.json”)

overload or extend a Dev Container configuration file (`devcontainer.json`)

提问人:Pascal 提问时间:11/10/2023 最后编辑:Pascal 更新时间:11/10/2023 访问量:16

问:

我正在寻找扩展或重载已添加到存储库/版本控制的文件的可能性。devcontainer.json

当前

示例项目结构(可以使用 vscode 中的“Try a Dev Container -> Python3”命令进行复制):

.
├── .devcontainer
│   └── devcontainer.json
├── .git
│   ├── FETCH_HEAD
...
├── app.py
├── requirements.txt
...

现在,该示例的实际情况看起来有所不同,但为了简化起见,让我们假设它看起来像这样:devcontainer.json

{
    "name": "Python 3",
    "image": "mcr.microsoft.com/devcontainers/python:0-3.11",
    "postCreateCommand": "pip3 install -r requirements.txt"
}

到目前为止,这很好。

尝试

我想保留该配置文件。但是对于我们使用的一些开发 PC,我们也提供了 GPU。现在当我添加

"runArgs": ["--gpus", "all"],

对于实际安装了 GPU 的 PC,一切都很好。

但是对于没有的 PC,会发生错误(记不清,关于 nvidia 容器的一些事情)。

目标/理念

我正在寻找可以保存在存储库中的配置之类的东西,比如上面的文件。还有类似扩展文件之类的东西,这是另外考虑的,比如.devcontainer.jsondevcontainer.extend.json

最后,我会将 添加到该文件中,以便将个人的、与计算机相关的配置(如 )放在该文件中。devcontainer.extend.json.gitignore"runArgs": ["--gpus", "all"]

因此,该文件将不包含任何其他内容devcontainer.extend.json

"runArgs": ["--gpus", "all"],

这将在原始配置之后进行,以便它重载原始配置(在这种情况下,不完全是重载,而是通过添加另一个设置来扩展配置)

为了完整起见,当两个文件合并时,完整的 devcontainer 配置将如下所示:

{
    "name": "Python 3",
    "image": "mcr.microsoft.com/devcontainers/python:0-3.11",
    "postCreateCommand": "pip3 install -r requirements.txt",
    "runArgs": ["--gpus", "all"]
}

包含扩展文件的新文件夹结构可能如下所示:

.
├── .devcontainer
│   ├── devcontainer.json
│   └── devcontainer.extend.json
├── .git
│   ├── FETCH_HEAD
...
├── app.py
├── requirements.txt
...

问题

是否有我不知道的已经可用的东西?实现其他配置甚至是一个好策略吗?

json visual-studio-code vscode-extensions vscode-devcontainer

评论

1赞 afaulconbridge 12/7/2023
我认为 github.com/devcontainers/spec/issues/22 相关的开放规范问题?
0赞 Pascal 12/8/2023
@afaulconbridge感谢您的提示。你找到的那个几乎就是我想要的。目前,我找到了另一种解决方案,该解决方案适用于我在这里描述的问题(GPUsupport),我将在一分钟内添加答案。另外:打开这个问题后,我还为此打开了一个功能请求。然后(再次)搜索了更长的时间,发现有很多人要求这个或类似的选项。例如,有这个:github.com/microsoft/vscode-remote-release/issues/3279

答:

0赞 Pascal 12/8/2023 #1

整体

经过(另一次)搜索以及评论中的提示,我发现有很多人要求这样做。

例如:

  • 覆盖 .devcontainer #3279
  • 添加 “extends” 顶级属性以启用简单的配置继承 #22

到具体问题

实际上,我能够以另一种方式帮助自己。对此打开了一个功能请求,并得到了一个非常方便的答案,即某些客户端的 GPU 配置偏离问题(不是整体容器配置问题)。

可选 GPU 配置的诀窍是添加

"hostRequirements": {"gpu": "optional"}

到 devcontainer.json