19

フロントに zuul ベースのリバース プロキシを備えたいくつかのスプリング ブート ベースのマイクロサービスで構成されるアプリケーションを作成しています。

自分のマシンでサービスを開始すると機能しますが、サーバーのロールアウトのためにサービスに docker を使用したいのですが、これは今のところ不可能のようです。

通常、コンテナの外側には固定の「内部」ポートとランダム化されたポートがあります。しかし、コンテナー内のアプリは、外部ポート (および IP) を知りません。

Netflix のツールは、私が効率的なマイクロサービス アーキテクチャを書きたいと思っていたものと一致しており、概念的には Docker が本当に好きです。私が見る限り、コンテナーを起動し、ホストの外部ポートを収集してアプリに渡すのは非常に面倒です。アプリの起動後にポートを単純に変更することはできないからです。

Docker ベースのクライアントで eureka を使用する方法はありますか?

[更新] 問題の説明が不十分だったと思います。だから多分これはそれをもう少し明確にします:

eureka サーバー自体は docker で実行できます。1 つしかなく、外部ポートは関係ありません。リンク機能を使用して、クライアントからアクセスできます。

問題は、クライアントが自分自身を登録する URL です。これはたとえばhttps://localhost:8080/ですが、動的ポート割り当てのため、実際にはhttps://localhost:54321/経由でしかアクセスできません。

そのため、eureka はサービスに対して間違った URL を返します。

更新 以下の回答を更新しましたので、そちらをご覧ください。

4

2 に答える 2

4

Docker インスタンスごとにディレクトリを設定し、それをホストとインスタンスの間で共有してから、そのディレクトリ内のファイルにポートと IP アドレスを書き込むことができます。

$ instanceName=$(generate random instance name)
$ dirName=/var/lib/docker/metadata/$instanceName
$ mkdir -p $dirName
$ docker run -name $instanceName -v ${dirName}:/mnt/metadata ...
$ echo $(get port number and host IP) > ${dirName}/external-address

次に、アプリケーションから/mnt/metadata/external-addressを読み取り、その情報を Eureka で使用します。

于 2015-05-08T05:45:25.007 に答える