databricksruntime/standard
,可以在这里找到。我需要
Dockerfile
与devcontainer.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.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.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.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"
。这似乎是错误的。容器现在正在运行。我参考了这篇文章。
我仍在研究中。有人遇到过这个问题吗?我错过了什么?