Docker:「マニフェストリストエントリにwindows / amd64に一致するマニフェストがない」


151

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

この問題を解決するにはどうすればよいですか?


5
他の人を助けるために、ベースOSとしてlinuxのイメージを作成しているときにこのエラーに遭遇しました...このエラーの理由は、それがWindowsコンテナーに設定されていたため、Linuxコンテナーに切り替えてから機能し始めました...
Abhishek Jain

また、後世のために、私はこれでWindowsコンテナーを構築しました。私はWindowsに切り替えましたが、Linuxに戻ったようです。Windowsに戻すと問題が解決しました。
John MacIntyre

回答:


214

Windows 10でも同じ問題が発生しました。実験モードでDockerデーモンを実行することで回避しました。

  1. WindowsシステムトレイのDockerアイコンを右クリック
  2. 設定に移動
  3. デーモン
  4. 高度な
  5. をセットする "experimental": true
  6. Dockerを再起動します

6
Dockerインスタンスを右クリックするにはどうすればよいですか?WindowsのタスクバーのDockerアイコンですか?
Peter Mortensen、2018

2
@PeterMortensenが正解です。タスクバーのDockerアイコンです
ベンスカビア2018

以前の回答に加えて、C:\ WINDOWS \ System32 \ drivers \ etc \ hosts.etcの「読み取り専用」属性も削除する必要がありました
Thiago

3
Windowsでは、設定ファイルを「%programdata%\ docker \ config \ daemon.json」に直接配置し、そこに属性を設定できます。
NemyaNation

1
スタンドアロンのバイナリ使用--experimental機能からドッキング(デーモン)を実行している場合
Anwar

91

このエラーには多くの理由が考えられます。ただし、このエラーの最も明白な理由は、LinuxコンテナーモードでWindowsコンテナーを使用していること、またはその逆です。

  1. コンテキストメニューのシステムトレイのDockerアイコンをクリックします
  2. 「Switch to Window / Linux Container」をクリックします
  3. オプションダイアログの切り替えボタンをクリック
  4. 少し時間がかかるかもしれません
  5. Dockerが現在実行状態であることを確認してください

コンテナモードの切り替えダイアログ


3
「windows / amd64に一致するマニフェストがない」という私の問題は解決されました
winlinux

1
あなたはこの質問に答える必要がありますstackoverflow.com/questions/56005151/...
xpto

1
問題は、「マニフェストリストエントリにwindows / amd64 10.0.17134に一致するマニフェストがない」という問題でした
Amna

86

Windowsコンテナーモードです。そのため、プルするイメージがWindowsアーキテクチャ向けに構築されているかどうかわからない場合、Linuxコンテナに切り替える必要があります。


1
代替案(私も機能していることがわかりました)はチャックの答えにあります
Peter Mortensen

3
これで問題は解決しました。Windows 10プラットフォームを使用していました。
somnathchakrabarti

切り替えに失敗したら?回避
ティアゴメディチ

1
Linuxコンテナーに切り替えると、Docker内でWindowsアプリケーションをホストできるようになりますか?たとえば、同じDockerインスタンスでIISとMySQLを使用します。
webworm

Windows用のMySQLもあるので、@webworm。Windowsバージョンだけでなく、IISと混在させたいときにLinuxバージョンを使用するのはなぜですか。
ジョージ・ビルビリス

35

これを行う別の可能な方法:

システムトレイで、Dockerアイコンを右クリックし、をクリックしSwitch to Linux containersます。

(Docker for Windows、Community Edition、バージョン18.03.1)


30

私の場合、私が使用していたWindows OSのバージョンが、プルしようとしたタグをサポートしていないということでした。古いタグを使用することで、これを機能させることができました。

具体的には:

docker pull mcr.microsoft.com/windows/nanoserver:1903 エラー

docker pull mcr.microsoft.com/windows/nanoserver:1803-amd64 働いた


この!Microsoftは、古いイメージ(servercore / nanoserver)と比較して、何かを変更しました。次に、展開先のシステムのWindowsバージョンを検索し、それに応じてベースイメージを選択する必要があります。
JustCoding

1
Joedragonsに感謝します。
rishi jain

素敵な答え!これは、このチュートリアルdocs.microsoft.com/en-us/virtualization/windowscontainers/…
user1299379

それも私のために働いた。しかし、たとえばhello-worldのように、すべてのイメージをプルするときにこのアプローチが必要になるということですか?
Mandroid

@Mandroid調査結果に関心がありますが、一部の画像は機能しているように見え、一部の画像は機能しなかったため、セットアップ固有のものと思われます。たとえば、Windowsパッチがある場合、パッチは別のパッチとは異なる場合があります。
joedragons

21

バージョン:Windows 10

ステップ1:Dockerインスタンスを右クリックし、設定に移動
ここに画像の説明を入力してください

ステップ2:基本から詳細、および「実験的」設定:true ここに画像の説明を入力してください

ステップ3:Dockerを再起動する
ここに画像の説明を入力してください

手順4:dockerfileのインストールが成功した(例:docker build -t williehao / cheers2019) ここに画像の説明を入力してください


11

最初にLinuxプラットフォームでプルする必要があります。その後、Windowsで実行できます。

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

ブログ投稿Docker for Windows Desktop 18.02 with Windows 10 Fall Creators Updateを参照してください。


はい、--platformフラグも機能します。それはものを再ダウンロードするかもしれませんが。
ピーターモーテンセン

「--platform」は、実験的機能が有効になっているDockerデーモンでのみサポートされています
MichalŠpondr19年

6

私はこれをWindows 10で管理Powershellで実行することで解決しました:

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

その後:

./DockerCli.exe -SwitchDaemon

3

あなたが引っ張っているアプリケーションを考えてください-それらはWindowsベースですか?そうでない場合は、Linuxコンテナを実行する必要があります。

試験運用モードを使用しない場合、Dockerを使用できるのは1つのスタイルのコンテナと他のスタイルのコンテナのみです。上記のように試験運用モードをアクティブにすると、作成ファイルでプルしているアプリケーションの必要に応じて、WindowsおよびLinuxコンテナーを使用できます。

キーノート:実験的-Dockerによってまだ開発中です。


3

これは、Windowsコンテナーが原因で発生するだけではありません!

現在、すべてのNode.Js dockerイメージはプル可能ではありません。前にプルしようとしているイメージを常に確認してください。

関連Github-Issue


3

これは 、Windows 10で「ドッカープル」が失敗した#1100

追加--experimentalが機能しない場合は、Windows用のDockerを再インストールすることを検討してください。


「experimental:true」を追加してもうまくいかなかったので、Dockerを再インストールする前にLinuxコンテナーに切り替えてみたらうまくいくと思いました。
yogescicak

Windows環境では、Hyper-V仮想マシン管理サービスが実行されているかどうかも確認し、Dockerをインストールした後、Linuxコンテナーモードに切り替えます。
ジュニアメイヘ

experimental作品を追加、ありがとう...なぜそうなのですか?
Angshuman Agarwal

@AngshumanAgarwal実験的な機能を使用する(docs.docker.com/docker-for-windows/#command-lineは)追加のドライバ(github.com/docker/cli/blob/master/experimental/...用ドッカーを使用するために必要になる場合があります)ウィンドウズ。
VonC

わかりました、ありがとうございます。しかし、私はまだWindows 10の問題を確認しています。Docは、Dockerはネイティブで実行されると言っていますが、そうではありません。機能させるためには、Windows 10で「Linuxコンテナー」に切り替える必要がありました。
Angshuman Agarwal

2

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 VS2017を選択したことでした。以下同様に変更したところ、ビルドは成功しました。

ここに画像の説明を入力してください

それが役に立てば幸い。


2

docker run mcr.microsoft.com/windows/servercore:ltsc2016

上記のコマンドを試してください。あなたが引っ張っているものは、あなたがいる基礎となるWindowsのバージョンと互換性があるはずです。Windowsサーバー2016にいる場合、上記は動作します。

詳細については、このスレッドをフォローしてください

https://github.com/docker/for-win/issues/3761


2

Dockerインスタンスを右クリックして、設定デーモンの詳細に移動します。「実験的」を設定します。

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

2

'latest'タグの廃止

より良いコンテナープラクティスを促進するために、すべてのWindowsベースイメージで「最新」のタグを非推奨にしています。 2019暦年の初めに、タグを公開しなくなります  ます。利用可能なタグのリストからヤンクします。

代わりに、本番環境で実行する特定のコンテナタグを宣言することを強くお勧めします。「最新」タグは特定の反対です。コンテナが実際にどのバージョンであるかについては、イメージ名とは別に何も伝えません。バージョンの互換性の詳細と適切なタグの選択については、コンテナドキュメントをご覧ください。

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


1

Windows用のdockerを使用してWindows IISイメージを実行するのと同じ問題がありました。上記のMohammad Trabelsiの応答を読んで、私の問題を解決するには、Windowsコンテナー用のコンテナー(Docker上)を切り替える必要があることに気付きました。

これをする:

  1. Dockerインスタンスを右クリック
  2. [ Windowsコンテナに切り替え...]を選択します

1

Windowsでは、ファイルdaemon.jsonまたはwindows-daemon-options.jsonを編集する必要があります。Windowsでの構成ファイルのデフォルトの場所は、%programdata%\ docker \ config \ daemon.jsonまたは%programdata%\ docker \ resources \ windowsです。 -daemon-options.json

ここに画像の説明を入力してください ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

jsonファイルのオプションのフィールド機能により、ユーザーは特定のデーモン機能を有効または無効にできます。例:{"features":{"buildkit":true}}は、デフォルトのDockerイメージビルダーとしてビルドキットを有効にします。


0

実行中のLinuxコンテナーが見つからないためにこのメッセージが表示されている理由。そのため、実行する前に、必ずWindowsからLinuxコンテナーに切り替えてください。


0

私にとって、それはC:\ ProgramData \ Docker \ config \ daemon.jsonへのアクセスが拒否されたためです。Linuxコンテナーに切り替えて、元に戻すことができます。切り替えに問題がなければ、アクセス権で動作します。


0

私の場合 、最初にウィンドウ更新する必要がありましたが、その後問題が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.