如何使用 vscode-devcontainer 来使用本地镜像

问题描述 投票:0回答:2

目前我正在使用

docker run
命令运行 docker 容器,我发现了 vscode 容器,看起来很有趣。我创建了一个工作区和一个
devcontainer.json

devcontainer.json

{
    "name": "dev",
    "image": "demo:focal",
    "containerUser": "root",
    "runArgs": [
        "--cap-add=SYS_PTRACE",
        "--security-opt",
        "seccomp=unconfined",
        "--security-opt",
        "apparmor=unconfined",
        "--network=host",
        "--privileged"
    ]
}

我已经构建了 dockerimage,并且不想再次重建。所以我在 json 文件中使用 docker 镜像名称。但是在打开容器时,我收到以下错误:

=> ERROR [internal] load metadata for docker.io/library/demo:f  1.4s
=> [context dev_containers_feature_content_source] load .dockerignore     0.0s
=> => transferring dev_containers_feature_content_source: 2B              0.0s
------
 > [internal] load metadata for docker.io/library/demo:focal:
------
[2022-10-27T06:53:02.045Z] Dockerfile.extended:8
--------------------
   6 |     
   7 |     
   8 | >>> FROM $_DEV_CONTAINERS_BASE_IMAGE AS dev_containers_target_stage
   9 |     
  10 |     USER root
--------------------
ERROR: failed to solve: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
[2022-10-27T06:53:02.053Z] Stop (2681 ms): Run: docker buildx build --load --build-context dev_containers_feature_content_source=/tmp/devcontainercli-user_s/container-features/0.20.0-1666853579352
[2022-10-27T06:53:02.053Z] Error: Command failed: docker buildx build --load --build-context dev_containers_feature_content_source=/tmp/devcontainercli-user_s/container-features/0.20.0-1666853579352]

我可以使用

docker run
命令运行相同的映像,但无法找到开发容器的问题是什么?

visual-studio-code vscode-remote vscode-devcontainer
2个回答
0
投票

我之前也遇到过同样的问题。

要解决这个问题,你应该使用

F1 > Dev Containers: Rebuild Container
而不是
F1 > Dev Containers: Rebuild Container Without Cache

然后就应该可以使用本地镜像了。在我的本地测试过并且工作正常。


0
投票

您的具体错误是:

=> ERROR [internal] load metadata for docker.io/library/demo:f  1.4s
[...]
ERROR: failed to solve: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

您的 docker 本地映像缓存中实际上并没有

demo:focal
映像,这就是这个意思,您可能将其命名为略有不同。


VSCode 只是使用

docker
(显然基于您的 VSCode 设置配置)在此处隐式构建图像,因此它临时构建一个以
FROM ${image}
开头的 Dockerfile,然后将其传递给
docker buildx build

您所看到的是

docker
检查本地图像缓存中的
demo:focal
,没有找到具有确切名称和版本的图像,对不以 URL+路径开头的图像名称使用回退行为并添加默认的
docker.io/library/
到名称中,仍然在本地图像缓存中找不到
docker.io/library/demo:focal
,然后尝试从注册表中获取图像,因为本地图像缓存中缺少该图像。由于您的图像名称没有能够拉取所需的注册表 URL,因此它使用内置后备行为并添加
docker.io/library/
,然后尝试从
docker.io/library/demo:focal
拉取。

如果您尝试执行

docker.io
,显然
docker pull docker.io/library/demo:focal
注册表将返回“访问被拒绝”错误。

因此要解决此问题,您需要:

  1. 在 docker 本地镜像缓存中已有您想要的镜像(在
    docker image ls
    结果中显示出完全相同的名称)
  2. devcontainer.json
    中为
    "image"
    字段使用相同的匹配名称。
© www.soinside.com 2019 - 2024. All rights reserved.