ホームページ  >  に質問  >  本文

Docker容器内微服务向注册中心注册ip地址的问题

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

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

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

给我你的怀抱给我你的怀抱2755日前1223

全員に返信(7)返信します

  • 高洛峰

    高洛峰2017-04-27 09:05:14

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-27 09:05:14

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

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-04-27 09:05:14

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-27 09:05:14

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

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-04-27 09:05:14

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

    返事
    0
  • 世界只因有你

    世界只因有你2017-04-27 09:05:14

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

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-27 09:05:14

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

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

    返事
    0
  • キャンセル返事