いくつかの調査の結果、現時点では「docker ソリューション」はないようです。私はまったく同じ問題を抱えています.1つのdockerホスト上の3つのコンテナにgaleraクラスターがあります。私のように、コンテナーのポート 3306 にアクセスする必要があるとします。これらの galera ノードで仮想 IP を管理していますが、うまく機能しています。しかし、ポートのホスト (mysql の場合は 3306) を virtual_ip:3306 に一致させるように Docker に指示することはできません。ホストからのポートは、コンテナーとポートにマップする必要があります。IP アドレスではありません。次のようなポート マッピングを使用して、仮想 IP を持つコンテナーを実行する場合:
docker run -d -p 3306:3306 docker_image /bin/bash
3306 のパブリック ホスト IP アドレスへの要求は、コンテナー ネットワーク インターフェイスのポート 3306 にリダイレクトされます (理論上は、静的アドレスと仮想アドレスの 2 つのアドレスがあります)。ただし、仮想 IP が別の Docker に移動した場合、ポート マッピングは何も変更されません。とにかく、外部からのリクエストは最初のコンテナにリダイレクトされます。(ちなみに、複数のコンテナーを同じ docker ホストのポートにマップすることはできません。実際には役に立たないでしょう)
私の意見では、コンテナで HAProxy または Nginx リバース プロキシを使用できます。したがって、3306 のホスト ポートを HAProxy の 3306 ポートにマップでき、HAProxy はリクエストをクラスターにリダイレクトできます (負荷分散の有無にかかわらず)。したがって、仮想 IP も必要ありません。しかし、今は素晴らしい単一障害点があります。別のリバース プロキシをバックアップとして追加するのはよいことですが、そうすると、フェイルオーバー用の仮想 IP が必要になり、最初の問題で立ち往生してしまいます。
誰かがこれに対するより良い解決策を持っているなら...