如何将挂载绑定到 vscode devcontainer,而不在 devcontainer.json 中对其进行硬编码

thc*_*ark 7 visual-studio-code devcontainer remote-containers

这个问题上建议应该.devcontainer.json承诺。

我同意,但有一个问题。我需要将本地目录绑定挂载到我的 devcontainer 中。这需要我的同事没有的本地路径。目的是将我的 GCP 凭证挂载到我的 devcontainer 中,以便与 gcloud CLI 一起使用。

我的 .devcontainer.json 看起来像:

{
  "image": "some/image",
  // ... settings, extensions, forwardPorts, postCreateCommand, remoteUser, runArgs ...

  // Mount gcloud configuration directory
  "mounts": [
    "source=/Users/myname/.config/gcloud,target=/gcp/config,type=bind,consistency=cached"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是可行的,但如果我提交这个,它会破坏其他人的设置。

如何创建到我本地定义的 vscode devcontainer 的绑定挂载,而不添加条目.devcontainer.json

解决方法

一种解决方法是将其转换为 docker-compose 设置,然后定义一个docker-compose.developer-overrides.yml不提交但必需的文件。但这似乎是错误的解决方案,应该有一个我错过的设置覆盖。

另一个方法是挂载用户的主目录(vscode 用户指南展示了如何为 Windows 和 Linux 用户执行此操作: "source=${localEnv:HOME}${localEnv:USERPROFILE},target=/host-home-folder,type=bind,consistency=cached" ...但是所有用户都必须将其 gcloud 配置安装在本地计算机的同一位置;我我不确定这是否可能。

小智 2

我将配置保存在 Docker 卷中。有一个例子:

devcontainer.json文件

{
  "initializeCommand": ["init-host.sh"],
  "mounts": [
    "type=volume,source=devvolume-gcloud,target=/root/.config/gcloud"
  ]
}
Run Code Online (Sandbox Code Playgroud)

init-host.sh文件

#!/usr/bin/env sh
set -e

docker context use default
docker volume create devvolume-gcloud
Run Code Online (Sandbox Code Playgroud)