scale コマンドが失敗する原因となる 2 つの問題があることがわかりましたが、適切なマルチホスト ネットワーク設定を使用してもまだ機能していません。
同じ作成アプリ内の別のコンテナーにリンクされた作成アプリケーションからコンテナーをスケーリングする場合- 新しいマルチホスト ネットワーク機能を使用するのではなく、非推奨 (?) の「リンク」機能を使用してコンテナーを結合していたため、これは失敗していました。どうやら、「リンク」は単一のマシンでのみ機能し、複数のマシンに拡張することはできません。(私はこれが事実であると確信していますが、間違っている可能性があります)
リンクされていないコンテナをスケーリングしようとしたとき- これは実際には期待どおりに機能していました。Docker がコンテナーをスケールアウトすることを期待していたマシンで他のコンテナーが実行されていることを忘れていました。したがって、Swarm スケジューラーは、現在のマシンの使用率が最も低かったため、新しくスケーリングされたコンテナーを現在のマシンに配置しました。(これは 2 台のマシンのスウォーム クラスター上にありました)
編集 - 実際の解決策
さて、最終的な問題はbuild
、イメージを で指定するのではなく、イメージの作成に使用する構成アプリの一部をスケーリングできないことだったようですimage
。
そのコンテナをスケーリングしようとしているマシンには、そのイメージを作成するためのビルド ファイルがないため、これは理にかなっていると思いますが、Docker Compose/Swarm はそれを理解し、何らかの形でマシン間でコピーするのに十分スマートであると想定していました.
したがって、解決策は、 でイメージを事前にビルドしてDocker build
から、そのイメージをパブリック Docker Hub または独自のプライベート レジストリにプッシュし、Docker 構成ファイルでそのイメージをimage
で作成しようとするのではなく、 で指定することbuild
です。