为什么 docker-compose 突然失败并出现错误内部加载元数据?

ssm*_*ith 96 docker docker-compose

我已经运行 docker-compose build 好几天了,每天很多次,并且没有更改我的 DOCKERFILEs 或 docker-compose.yml。突然一个小时前我开始得到这个:

Building frontdesk-api
failed to get console mode for stdout: The handle is invalid.
[+] Building 10.0s (3/4)
 => [internal] load build definition from Dockerfile                       0.0s
[+] Building 10.1s (4/4) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 32B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => ERROR [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0.  10.0sailed to do request: Head https://mcr.microsoft.com/v2/dotnet/sdk/manifests/5.0.201-buster-slim: dial tcp: lookup mcr.microsoft.com on 192.168.65.5:53:
 => [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:5.0-bust  0.0s
------
 > [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim:
------
ERROR: Service 'frontdesk-api' failed to build
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

  • 再次运行
  • docker rm -f $(docker ps -a -q)
  • docker login
  • 不同的SDK镜像

这是 DOCKERFILE:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0.201-buster-slim AS build
WORKDIR /app
# run this from repository root
COPY ./ ./ 
#RUN ls -lha .

RUN echo 'Building FrontDesk container'

WORKDIR /app/FrontDesk/src/FrontDesk.Api
#RUN ls -lha .
RUN dotnet restore

RUN dotnet build "FrontDesk.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "FrontDesk.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "FrontDesk.Api.dll"]
Run Code Online (Sandbox Code Playgroud)

我怎样才能让我的构建再次运行?

小智 225

对我有用的解决方案是通过运行删除 .docker/config.json

rm  ~/.docker/config.json 
Run Code Online (Sandbox Code Playgroud)

那么docker-compose up your-services应该可以工作

  • 也为我工作过。但为什么?很高兴了解根本问题。 (25认同)
  • 我什至没有该文件:(所以没用 (6认同)
  • 在执行“docker system prune -a”后,这种情况开始发生在我身上 (4认同)
  • 这对我有用;从 `docker-compose` 迁移到 docker compose` (V2) 后不久,我遇到了一个问题,所以我猜配置中存在不兼容的条目 (2认同)
  • 它对我有用。但几天后又发生了。我的 `~/.docker/config.json` 仅包含我正在使用的上下文。在我的例子中,它看起来显然与 Docker Compose v2 相关。这次我最终删除了整个文件夹`~/.docker/` (2认同)

小智 69

对于Linux

步骤1:sudo vi ~/.docker/config.json

你会看到这样的东西:

    {
      "credsStore": "desktop.exe"
    }
Run Code Online (Sandbox Code Playgroud)

第 2 步:更新credsStorecredStore

第 3 步:运行您的服务docker-compose up your-services

视窗:

第 1 步:转到C:\Users\Name\.docker

第 2 步:打开config.json

第 3 步:更新credsStorecredStore

第 4 步:运行您的服务docker-compose up your-services

  • 这对我有用(Windows/WSL2/Ubuntu),谢谢。 (6认同)
  • 在 m1 芯片上为我工作 (3认同)
  • 这在 Mac 上对我有用 - M2 Pro 芯片 (2认同)
  • 这对我在 Windows 11/WSL2/Ubuntu 上有用。但是,造成这种情况的原因是什么? (2认同)
  • 第2步对我有用,这是一个奇怪的错误 (2认同)
  • 这对我在 MacBook Pro 上的工作 - 英特尔 (2认同)

小智 20

就我而言,是企业 VPN 导致了此问题。当我禁用 VPN 后,它工作得很好。我承认,这并不是一个真正的解决方案。您可以在此命令运行期间禁用 VPN,然后将其重新启用。


G-M*_*Man 11

在 Mac OS X 上对我有用的是编辑 Docker 配置:

sudo vi  ~/.docker/config.json
Run Code Online (Sandbox Code Playgroud)

改变

"credsStore": "desktop"

"credStore": "desktop"
Run Code Online (Sandbox Code Playgroud)

就我而言,运行:

sudo docker build -t php-demo .
Run Code Online (Sandbox Code Playgroud)

(构建演示/示例应用程序)

  • 非常感谢,我几天来一直在努力解决这个令人沮丧的问题,所有其他解决方案都不起作用。我什至在我的 M1 Air 上卸载并重新安装了 Docker 桌面,但奇怪的是,配置文件是由 docker 使用“credsStore”键生成的:带有额外的“s”。如此令人沮丧的问题!再次感谢 (2认同)

Joe*_*ips 9

mcr.microsoft.com 目前已关闭

我在拉取时收到几个不同的错误:

% docker pull mcr.microsoft.com/dotnet/sdk:5.0
Error response from daemon: Get https://mcr.microsoft.com/v2/: Service Unavailable

% docker pull mcr.microsoft.com/dotnet/sdk:5.0
5.0: Pulling from dotnet/sdk
received unexpected HTTP status: 500 Internal Server Error
Run Code Online (Sandbox Code Playgroud)

  • 是 DNS。始终是 DNS。叹。 (16认同)

Lui*_*yfe 8

arch/platform难道是,构建镜像的时候出错了?尝试在命令中指定一个:

docker build -t auth:1.0.0 --platform=linux/arm64 .
Run Code Online (Sandbox Code Playgroud)

获取当前的拱门

docker build -t auth:1.0.0 --platform=linux/arm64 .
Run Code Online (Sandbox Code Playgroud)


bik*_*868 5

就我而言,问题的出现是因为我的笔记本电脑中有 Apple Silicon,并且没有为 linux/arm64/v8 编译的我想要的映像版本。

要查看这是否是您的问题,请尝试docker pull <image>获取更详细的错误消息。

  • 太奇怪了,我运行了上面的“docker pull ...”,然后错误自行解决,我可以像正常一样进行构建 (3认同)