programing

도커: "매니페스트 목록 항목에 windows/amd64와 일치하는 매니페스트가 없습니다."

javajsp 2023. 8. 7. 22:20

도커: "매니페스트 목록 항목에 windows/amd64와 일치하는 매니페스트가 없습니다."

Windows에서 Docker를 사용하며 이 명령으로 PHP 이미지를 가져오려고 할 때

$ docker pull php

다음 메시지를 받았습니다.

Using default tag: latest
latest: Pulling from library/php no matching manifest for windows/amd64 
        in the manifest list entries

이 문제를 어떻게 해결할 수 있습니까?

Windows 10에서도 동일한 문제가 발생했습니다.도커 데몬을 실험 모드로 실행하여 우회했습니다.

  1. Windows 시스템 트레이에서 Docker 아이콘을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 설정으로 이동
  3. 데몬
  4. 고급.
  5. 을 합니다."experimental": true
  6. 도커 다시 시작

이 오류에는 여러 가지 이유가 있을 수 있습니다.그러나 이 오류의 가장 분명한 이유는 Linux 컨테이너 모드에서 Windows 컨테이너를 사용하거나 그 반대의 경우입니다.

  1. 상황에 맞는 메뉴의 시스템 트레이에서 도커 아이콘 클릭
  2. "Windows/Linux 컨테이너로 전환"을 클릭합니다.
  3. Switch(스위치) 대화상자에서 Switch(스위치) 버튼을 클릭하는 옵션
  4. 시간이 조금 걸릴 수 있습니다.
  5. 도커가 지금 실행 중인지 확인

Switch Container Mode Dialog

Windows 컨테이너 모드에 있습니다.따라서 가져올 이미지가 Windows(윈도우) 아키텍처용으로 빌드되었는지 확실하지 않으면 Linux 컨테이너로 전환해야 합니다.

제 경우, 제가 사용하던 Windows OS 버전이 제가 풀하려는 태그를 지원하지 않는 것이었습니다.오래된 태그를 사용하여 이 작업을 수행할 수 있었습니다.

구체적으로:

docker pull mcr.microsoft.com/windows/nanoserver:1903오류가 있는

docker pull mcr.microsoft.com/windows/nanoserver:1803-amd64을 한

버전:윈도우 10

1단계: 도커 인스턴스를 마우스 오른쪽 버튼으로 클릭하고 설정으로 이동
enter image description here

2단계: 기본에서 고급으로 설정하고 "실험" 설정: true

Docker3 시작: "Docker 3"
enter image description here

4단계: 도커 파일 설치 성공(예: 도커 빌드 -t williehao/cheers2019)

이를 위한 또 다른 가능한 방법은 다음과 같습니다.

아이콘을 오른쪽 단추로 ▁on,▁in다음▁right한을 클릭합니다.Switch to Linux containers.

(Windows용 Docker, Community Edition, 버전 18.03.1)

관리 Powershell에서 실행하여 Windows 10에서 이 문제를 해결했습니다.

cd "C:\Program Files\Docker\Docker"

그리고 나서:

./DockerCli.exe -SwitchDaemon

Windows 1020H2용 업데이트

  1. 도커 구성으로 이동
  2. 도커 엔진 탭으로 이동
  3. 바꿈 줄꿈바"experimental": false"experimental": true
  4. 를 사용하여 도커를 다시 시작합니다.Apply & Restart단추를 채우다

enter image description here


또한 다음과 같이 즐겨찾는 코드 편집기(시각적 코드, 메모장++...)를 사용하여 구성 파일을 수동으로 수정할 수 있습니다.

# BACKUP Your file with PowerShell
Copy-Item -Path C:\ProgramData\Docker\config\daemon.json -Destination C:\ProgramData\Docker\config\daemon.json.backup

# Open the file with Visual Code
code C:\ProgramData\Docker\config\daemon.json

또는 Powershell을 사용하여 문자열을 직접 변경합니다.

# Set Path in variable
$FILE = "C:\ProgramData\Docker\config\daemon.json"

# Replace '"experimental": false' to '"experimental": true'
(Get-Content -Path $FILE) -replace '"experimental": false','"experimental": true' | Set-Content -Path $FILE

# Check the file content
type $FILE

출력 예제

PS C:\WINDOWS\system32> type $FILE
{
  "registry-mirrors": [],
  "insecure-registries": [],
  "debug": false,
  "experimental": true
}

필요에 따라 Docker 데몬을 다시 시작한 후

PS C:\WINDOWS\system32> Restart-Service docker

서비스 상태 확인

PS C:\WINDOWS\system32> Get-Service docker
Status   Name               DisplayName
------   ----               -----------
Running  docker             Docker Engine

먼저 Linux 플랫폼을 사용한 다음 Windows에서 실행할 수 있습니다.

docker pull --platform linux php
docker run -it php

Windows 10 Fall Creators Update가 설치된 Windows Desktop 18.02용 도커 블로그 게시물을 참조하십시오.

도커에서:

  1. 설정으로 이동
  2. 도커 엔진으로 이동
  3. 실험을 참으로 변경
  4. Apply and Restart를 누릅니다.

.

이것은 윈도우 10 #1100에서 "도커"이 실패하는 것처럼 보입니다.

추가하는 경우--experimental작동하지 않습니다. Windows용 도커를 다시 설치해 보십시오.

Docker 인스턴스로 이동 설정 데몬 고급 설정 "실험": trueRestartDocker를 마우스 오른쪽 버튼으로 클릭합니다.

 {
      "registry-mirrors": [],
      "insecure-registries": [],
      "debug": true,
      "experimental": true
    }

Docker Desktop(이전에 WSL2 통합으로 구성됨)을 업그레이드한 후 이 문제가 발생했습니다.

만약 당신이 업그레이드 후에 이것에 부딪혔다면 참고로, 나는 다음을 해야만 했습니다.

관리자(고급) 모드에서 PowerShell을 실행하고 다음 명령을 실행합니다.

cd "C:\Program Files\Docker\Docker"
./DockerCli.exe -SwitchDaemon

그렇지 않으면 Docker Desktop(도커 데스크톱)의 설정 탭을 열지 못할 수 있습니다.

그런 다음 "WSL2 기반 엔진 사용"을 선택 취소하여 설정에서 Linux 컨테이너로 전환한 다음 다시 시작해야 합니다.

enter image description here

이 시점에서 이미지를 다운로드하고 컨테이너를 실행하는 빠른 테스트를 실행하면 문제가 해결되는지 확인할 수 있습니다.

docker run --rm -ti alpine:latest uname -a
Linux 2b08b155a042 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 Linux

WSL2 통합을 사용하여 실행 중이었다면 Settings(설정) 화면으로 돌아가서 2단계에서 수행한 선택을 취소하기만 하면 됩니다(도커가 다시 시작됩니다.

이 시점에서 업그레이드 전에 가지고 있던 모든 이미지와 중지된 컨테이너가 표시됩니다.

도커를 배우기 시작할 때 이 오류가 발생했으며 이 시나리오에 대한 이해는 다음과 같습니다.

이 문제가 발생하는 이유:Linux 기반 이미지를 참조하고 있으며 현재 Windows 기반 플랫폼을 사용하여 도커 이미지를 실행/구축하고 있기 때문입니다.

해상도:단답:현재 플랫폼을 Linux 모드로 전환하거나 Windows 기반 이미지를 끌어옵니다.다음은 가능한 옵션 목록입니다.

  1. 오류가 "no matching manifest for windows/amd64"이므로 Linux Containers로 전환합니다.
  2. 도커 환경을 "실험적"으로 설정합니다. true.
  3. 플랫폼 관련 이미지 풀(예: 도커 풀) -- 플랫폼 {linux/Windows} {image-name}
docker run mcr.microsoft.com/windows/servercore:ltsc2016 

위의 명령을 사용해 보십시오.현재 사용 중인 기본 Windows 버전과 호환되어야 합니다. 위는 Windows Server 2016에 있는 경우 작동합니다.

자세한 내용은 이 스레드를 참조하십시오.

'최신' 태그 사용 안 함

더 나은 컨테이너 작업 방식을 장려하기 위해 모든 Windows 기본 이미지에 '최신' 태그를 사용하지 않습니다. 2019년 초에는 더 이상 태그를 게시하지 않습니다. 사용 가능한 태그 목록에서 제외하겠습니다.

프로덕션에서 실행할 특정 컨테이너 태그를 선언하는 것이 좋습니다.'최신' 태그는 특정 태그와 반대로, 이미지 이름 외에 컨테이너가 실제로 어떤 버전인지 사용자에게 알려주지 않습니다.버전 호환성에 대한 자세한 내용을 읽고 컨테이너 문서에서 적절한 태그를 선택할 수 있습니다.

https://techcommunity.microsoft.com/t5/containers/windows-server-2019-now-available/ba-p/382430 #

사용 중인 애플리케이션을 고려해 보십시오. 이 애플리케이션은 Windows 기반입니까?그렇지 않은 경우 리눅스 컨테이너를 실행해야 합니다.

실험 모드를 사용하지 않고 한 가지 유형의 컨테이너에서만 도커를 사용할 수 있습니다.위에서 언급한 바와 같이 실험 모드를 활성화하면 작성 파일에서 풀하는 응용 프로그램의 필요에 따라 Windows 및 Linux 컨테이너를 사용할 수 있습니다.

키노트:실험 - 아직 도커가 개발 중입니다.

이는 윈도우 컨테이너 때문만은 아닐 수 있습니다!

오늘은 모든 노드입니다.Js 도커 이미지는 풀 수 없습니다.항상 이전에 풀하려는 이미지를 확인합니다.

관련 Github-이슈

Windows용 도커를 사용하여 Windows IIS 이미지를 실행할 때도 동일한 문제가 발생했습니다.위의 Mohammad Travelsi 응답을 읽고 문제를 해결하려면 컨테이너를 Windows 컨테이너로 전환해야 한다는 것을 깨달았습니다.

작업 방법:

  1. Docker 인스턴스를 마우스 오른쪽 버튼으로 클릭합니다.
  2. "Windows 컨테이너로 전환..."을 선택합니다.."

Azure DevOps 파이프라인에서 이 오류가 발생했습니다.

Step 1/7 : FROM nginx:alpine
alpine: Pulling from library/nginx
no matching manifest for windows/amd64 10.0.14393 in the manifest list entries
##[error]C:\Program Files\Docker\docker.exe failed with return code: 1
##[section]Finishing: Build an image

문제는 Hosted Ubuntu 대신 Hosted VS 2017을 선택했다는 것입니다.다음과 같이 변경한 후 빌드에 성공했습니다.

enter image description here

도움이 되길 바랍니다.

저의 경우 먼저 윈도우를 업데이트해야 했고, 그 후 문제가 사라졌습니다.

Linux/WSL을 사용하여 Windows 이미지를 가져오려고 하지 않는지 확인합니다.

대신 Powershell 터미널을 사용합니다.

Windows에서 daemon.json 또는 windows-daemon-options.json 파일을 편집해야 합니다. Windows에서 구성 파일의 기본 위치는 %programdata%\docker\config\daemon.json 또는 %programdata%\docker\resources\windows-daemon-options.json입니다.

enter image description here enter image description here

enter image description here

enter image description here

json 파일의 선택적 필드 기능을 통해 사용자는 특정 데몬 기능을 활성화하거나 비활성화할 수 있습니다.예: {"기능":{"buildkit": true}}: 기본 도커 이미지 작성기로 빌드킷을 사용하도록 설정합니다.

저는 C:\ProgramData\Docker\config\daemon.json에 대한 액세스가 거부되었기 때문에 수정한 후 작동합니다.리눅스 컨테이너로 전환하고 다시 전환할 수 있습니다.전환에 문제가 없으면 액세스 권한으로 작동합니다.

실행 중인 Linux 컨테이너를 찾을 수 없기 때문에 이 메시지가 표시되는 이유입니다.따라서 실행하기 전에 윈도우즈에서 리눅스 컨테이너로 전환해야 합니다.

언급URL : https://stackoverflow.com/questions/48066994/docker-no-matching-manifest-for-windows-amd64-in-the-manifest-list-entries