Docker容器内微服务向注册中心注册ip地址的问题
给我你的怀抱
给我你的怀抱 2017-04-27 09:03:14
0
7
1290

微服务启动的时候,会自动向服务注册中心报告自己的ip和端口。但是服务是在docker容器内运行的,注册的ip就成了172开头的docker内部ip, 这个地址是无法被其它机器访问的。

这种情况是不是必须手动将服务注册的地址改成宿主机的地址和端口呢,有其它好方案没

----- update -----
docker 1.12版本以后engine有了swarm模式,经测试使用swarm的overlay网络可解决跨主机通讯问题,这种方案是否合适呢

给我你的怀抱
给我你的怀抱

全員に返信(7)
小葫芦

docker swarm によって提供されるオーバーレイ ネットワークは、ホスト間のコンテナ内ネットワーク通信を提供でき、ローカル コンテナは起動時にネットワークを指定して内部ネットワークを形成でき、etcd、consul を使用して nginx を swarm ホスト上にホスト モードでデプロイできます。サービスを登録し、nginx のリバース プロキシ構成を更新して、動的なサービス検出を実現します。
ただし、現在、オーバーレイはすべてのクロスホスト通信方法の中で最もパフォーマンスの低下が大きく、60% に達しています。誰かがオンラインでテストを行っているので、チェックしてみることができます。したがって、現時点では、本番環境では依然として kubernetes または mesos を考慮する必要があります

いいねを押す +0
小葫芦

ネットワークについてはあまり詳しくありません。解決策を見つけるには、Docker クロスホスト通信を検索してください。

いいねを押す +0
我想大声告诉你

ホストを使用して内部DNSを追加します

いいねを押す +0
Ty80

いくつかのアイデアがあります:
1. サービスの開始時に、ホストデバイスが IP を報告します。
2. サービスの開始時に、ホストの IP 情報をコンテナーの環境変数に挿入します。
3. 登録センターが登録リクエストを受信すると、ネットワーク層IPから取得します

いいねを押す +0
曾经蜡笔没有小新

コンテナは動的であるため、通常、IP アドレスはランダムに割り当てられます。コンテナ スケジューリング システムを使用して一部のコンテナを自動的に開始した後、サービス登録を通じてこれらのコンテナのアクセス アドレスをサービス登録センターに記録できます。このようにして、外部サービスがこれらのコンテナにアクセスしたい場合、サービス検出を通じてこれらのコンテナにアクセスできます

いいねを押す +0
世界只因有你

非常にシンプルな、さまざまなクロスホスト Docker ネットワーク通信ソリューション。

kubernetes はフランネルを使用しています。

いいねを押す +0
巴扎黑

他の方法も検討できます
1. kubernetes などのサービス オーケストレーション ツールを使用します (Docker への大幅な変更)
2. consul などの登録センターを使用します (登録センターのコードへの大幅な変更)

マイクロサービスが Spring Cloud を使用する場合は、この問題を完全に解決できる 2 番目のオプションの方が推奨されます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート