Docker Swarmを使用していますが、docker-compose
を使用してサービスをデプロイしたいと考えています。私のサービスはmyuser/myrepo:mytag
と呼ばれるカスタムイメージを使用しており、これをDocker-Hubにプライベートリポジトリに正常にデプロイします。
私のdocker-composeは次のようになります。
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
実行する前に、docker pull myuser/myrepo:mytag
で画像を正常にプルしました。
docker stack deploy -c docker-compose.yml myapp
を実行すると、常に"No such image: myuser/myrepo:mytag"
というエラーが表示されます。
興味深いことに、docker-compose up
(つまり、スウォームモードなし)のみを使用して同じファイルを実行すると、すべてが正常に機能し、サービスが開始されます。
なぜこれが失敗するのか本当に分かりませんか?既にdocker system Prune
でdockerをクリーンアップしてから、イメージを拒否しましたが、成功しませんでした。
すでに解決策が見つかりました。私の画像はプライベートリポジトリでホストされています。 swarm manager(コマンドを実行した場所)の他に、実行中のswarmワーカーがいました。
docker stack deploy -c docker-compose.yml myapp
dockerを実行したときに、サービスをワーカーノードに展開しました(思ったとおりのマネージャーノードではありません)。ワーカーノードでは、Dockerにはプライベートリポジトリからイメージをプルするための資格情報がありませんでした。したがって、これを修正するには、フラグ--with-registry-auth
(リポジトリの資格情報をワーカーノードにプッシュする)を渡すか、イメージが存在するノードにサービスがデプロイされていることを確認します。
参照: https://docs.docker.com/engine/reference/commandline/deploy/
企業のファイアウォールの背後にあるMacでも同様の問題がありました。
インターネットに直接接続して初めて解決できました。
更新するだけで、VPNを使用している間、プロキシ設定なしでインターネットにアクセスでき、docker run
を使用して画像をダウンロード(ドッカー)できます。問題はdocker-compose
のみにあります。
VMのresolv.confでネームサーバーを8.8.8.8に変更しようとしましたが、問題は解決しませんでした。