使用 Dockerfile 和 devcontainer.json 从项目打开 VSCode 远程容器时出错

fps*_*dfm 7 docker dockerfile visual-studio-code databricks

我正在 VSCode 远程容器(在同一台机器上)中开发解决方案。一个项目需要一个在 VSCode 容器选择对话框中不可用的图像。有问题的图像可以在这里databricksruntime/standard找到。

我需要Dockerfile与定义相匹配devcontainer.json,以便容器符合该规范。我Dockerfile通过导航到关联的 Git找到了内容。

FROM databricksruntime/dbfsfuse:experimental

RUN apt-get update \
  && apt-get install -y openssh-server \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Warning: the created user has root permissions inside the container
# Warning: you still need to start the ssh process with `sudo service ssh start`
RUN useradd --create-home --shell /bin/bash --groups sudo ubuntu
Run Code Online (Sandbox Code Playgroud)

我在构建容器时手动创建了devcontainer.json目标图像。Dockerfile

{
    "name": "databricksruntime/standard",
    "build": {
        "dockerfile": "Dockerfile",
        "context": ".."
    },
  
    "customizations": {
      "vscode": {
        "extensions": ["dbaeumer.vscode-eslint"]
      }
    },
  
    "remoteUser": "vscode",
    "features": {
      "git": "latest",
      "git-lfs": "latest"
    }
  }
Run Code Online (Sandbox Code Playgroud)

我选择了“打开远程窗口”(VSCode GUI 的左下角)->“在容器中重新打开”。

这引发了:

[2022-08-05T17:01:32.739Z]来自守护程序的错误响应:databricksruntime/dbfsfuse 的清单: 未找到实验:清单未知:清单未知

[2022-08-05T17:01:32.832Z] 停止(2843 毫秒):运行:docker pull databricksruntime/dbfsfuse:experimental

[2022-08-05T17:01:32.833Z] []

[2022-08-05T17:01:32.833Z]错误:没有这样的图像:databricksruntime/dbfsfuse:experimental

当我们检查时,Dockerfile我们可以看到它引用了另一个图像。我查看了 pull 命令,docker pull databricksruntime/dbfsfuse并在终端中运行了它。该镜像已经存在并且在 Docker GUI 中可见。:experimental我注意到 pull 命令并不像第一行那样包含后缀Dockerfile。我把后缀去掉了 现在Dockerfile构建。

[+] Building 67.0s (17/17) FINISHED
 => [internal] load build definition from Dockerfile-with-features         0.1s
 => => transferring dockerfile: 844B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => resolve image config for docker.io/docker/dockerfile:1.4               2.0s
 => [auth] docker/dockerfile:pull token for registry-1.docker.io           0.0s
 => CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:443aab4c  0.0s
 => [internal] load .dockerignore                                          0.0s
 => [internal] load build definition from Dockerfile-with-features         0.0s
 => [internal] load metadata for docker.io/databricksruntime/dbfsfuse:lat  0.0s
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
 => => transferring dev_containers_feature_content_source: 2B              0.0s
 => [dev_container_auto_added_stage_label 1/3] FROM docker.io/databricksr  0.2s
 => [context dev_containers_feature_content_source] load from client       0.1s
 => => transferring dev_containers_feature_content_source: 270.81kB        0.0s
 => [dev_container_auto_added_stage_label 2/3] RUN apt-get update   && a  22.2s
 => [dev_container_auto_added_stage_label 3/3] RUN useradd --create-home   0.6s
 => [stage-1 1/2] COPY --from=dev_containers_feature_content_source . /tm  0.1s
 => [stage-1 2/2] RUN cd /tmp/build-features/local-cache && chmod +x ./i  41.0s
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:aa97f07c0ec4c2e8ae9d512da1bc45b63b32396266134  0.0s
 => => naming to docker.io/library/vsc-parallelloadsscd4-d62f8c81c6e595b4  0.0s
 => exporting cache                                                        0.0s
 => => preparing build cache for export                                    0.0s
Run Code Online (Sandbox Code Playgroud)

容器启动然后进行测试。又出现了一个错误:

[70182 ms] Shell 服务器终止(代码:126,信号:null)

[70182 ms] 无法找到用户 vscode:密码文件中没有匹配的条目

[2022-08-05T17:10:05.189Z] 启动:在容器中运行:cat /etc/passwd

[2022-08-05T17:10:05.189Z] 标准输入已关闭![2022-08-05T17:10:05.190Z]

错误:设置容器时发生错误。[2022-08-05T17:10:05.190Z] 在 HR (c:\Users\mruser.vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js: 239:2183) [2022-08-05T17:10:05.190Z] 在 tb (c:\Users\mruser.vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\ devContainersSpecCLI.js:239:2121)

[2022-08-05T17:10:05.190Z] 在 processTicksAndRejections (node:internal/process/task_queues:96:5) [2022-08-05T17:10:05.190Z]
在异步 QR (c:\Users\mruser. vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js:245:2006)

[2022-08-05T17:10:05.190Z] 在 async cb (c:\Users\mruser.vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js :245:3110)

[2022-08-05T17:10:05.190Z] 在 async i_ (c:\Users\mruser.vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js :245:13194)

[2022-08-05T17:10:05.190Z] 在 async n_ (c:\Users\mruser.vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js :245:12950)

[2022-08-05T17:10:05.200Z] 停止(69586 毫秒):运行:C:\Users\mruser\AppData\Local\Programs\Microsoft VS Code\Code.exe c:\Users\mruser.vscode\extensions \ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js up --user-data-folder c:\Users\mruser\AppData\Roaming\Code\User\globalStorage\ms -vscode-remote.remote-containers\data --workspace-folder c:\Users\mruser\source\repos\data\ParallelLoadsScd4 --workspace-mount-consistency 缓存 --id-label devcontainer.local_folder=c:\Users \mruser\source\repos\data\ParallelLoadsScd4 --日志级别调试 --log-format json --config c:\Users\mruser\source\repos\data\ParallelLoadsScd4.devcontainer\devcontainer.json --default-user -env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git -根真

[2022-08-05T17:10:05.200Z] 退出代码 1

[2022-08-05T17:10:05.204Z] 命令失败: C:\Users\mruser\AppData\Local\Programs\Microsoft VS Code\Code.exe c:\Users\mruser.vscode\extensions\ms-vscode- Remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js up --user-data-folder c:\Users\mruser\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote。远程容器\数据 --工作空间文件夹 c:\Users\mruser\source\repos\data\ParallelLoadsScd4 --workspace-mount-consistency 缓存 --id-label devcontainer.local_folder=c:\Users\mruser\source\ repos\data\ParallelLoadsScd4 --log-level debug --log-format json --config c:\Users\mruser\source\repos\data\ParallelLoadsScd4.devcontainer\devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root true

[2022-08-05T17:10:05.204Z] 退出代码 1

VSCode 缺少用户。该用户大概是为了让 VSCode 本地可以与 VSCode 远程进行交互。该用户的定义"remoteUser": "vscode",如下devcontainer.json

我已经看到这个答案了。我不确定如何定义这个用户,需要更多阅读。

我修改了将vscode 用户devcontainer.json设置为. 这似乎是错误的。容器现在正在运行。我参考了这篇文章"remoteUser": "root",

仍在调查此事。有人遇到过这个问题吗?我缺少什么?