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

6
我正在VSCode远程容器中开发解决方案(在同一台机器上)。其中一个项目需要一张在VSCode容器选择对话框中不可用的图片。所需的图片是databricksruntime/standard,可以在这里找到。
我需要Dockerfiledevcontainer.json定义匹配,以便容器符合该规范。我通过导航到相关Git找到了Dockerfile内容。
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

我手动创建了devcontainer.json,以便在构建容器时定位Dockerfile镜像。
{
    "name": "databricksruntime/standard",
    "build": {
        "dockerfile": "Dockerfile",
        "context": ".."
    },
  
    "customizations": {
      "vscode": {
        "extensions": ["dbaeumer.vscode-eslint"]
      }
    },
  
    "remoteUser": "vscode",
    "features": {
      "git": "latest",
      "git-lfs": "latest"
    }
  }

我选择了“打开远程窗口”(VSCode GUI的左下角) -> “在容器中重新打开”。
这将引发以下错误:
[2022-08-05T17:01:32.739Z] 守护程序的错误响应:找不到databricksruntime/dbfsfuse:experimental的清单:未知清单:未知清单
[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中可见。我注意到pull命令不包括后缀:experimental,而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

容器已启动并进行了测试。出现另一个错误:

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

[70182 ms] 找不到用户vscode: passwd文件中没有匹配的条目

[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]
在 async 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] 在 c:\Users\mruser.vscode\extensions\ms-vscode-remote.remote-containers-0.241.3\dist\spec-node\devContainersSpecCLI.js 的 async cb 处

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

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

[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 cached --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.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.remote-containers\data --workspace-folder c:\Users\mruser\source\repos\data\ParallelLoadsScd4 --workspace-mount-consistency cached --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远程进行交互而定义的。在devcontainer.json中,此用户被定义为"remoteUser": "vscode"

我看到了这篇SO回答。我不确定如何定义这个用户,需要更多阅读。

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

我仍在研究中。有人遇到过这个问题吗?我错过了什么?

1个回答

0

这个对我来说解决了错误:

sudo snap install docker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接