2016-11-12 6 views
1

私は多くの検索をしましたが、この問題を解決することはできません。別のコンテナでサービスからrabbitmqドッカーコンテナに接続する

私は、このコマンドで実行されている基本的なRabbitMQのコンテナを持っています。

docker run -d --hostname rabbitmqhost --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management

私はこのコンテナに接続microserviceを作成するために、namekoを使用しています。 (

nameko run main --broker amqp://guest:[email protected]

私はドッカー容器にサービスを置くことを望んでいた:このサービスの実行は

from nameko.rpc import rpc 
class Service_Name(object): 
    name = "service_name" 

    @rpc 
    def service_endpoint(self, arg=None): 
     logging.info('service_one endpoint, arg = %s', arg) 

とコマンドを使用して、私のホストマシンからのRabbitMQに接続します。ここでは基本的なmicroserviceモジュールmain.pyですservice_oneと呼ばれています)。しかし、これを実行して以前のnamekoコマンドを実行すると、2つのコンテナをどのように試してリンクしても、私はsocket.error: [Errno 111] ECONNREFUSEDになります。

正しい方法は何ですか?目的は、各サービスを容器に入れて、すべてウサギを介して互いに話すことです。ありがとう。

+0

「どのように2つのコンテナをリンクしようとしても...」あなたは何を試しましたか? – larsks

+0

私はリンクとネットワークを試してみましたが、それぞれの方法では、ampq接続の値が多少間違っていました。 (私はAMQ_PORT_5672_TCP_ADDRなどではなくlocalhostを使用していました)。 – steve

答えて

2

コンテナ内でサービスを実行している場合は、amqp://guest:[email protected]が役に立たなくなります。 localhostは、コンテナのネットワーク名前空間を参照しています。もちろん、そこには何もないので、ECONNREFUSEDが得られます。

別のコンテナのサービスに接続する場合は、そのコンテナのIPアドレス、またはそのコンテナのIPアドレスに解決されるホスト名を使用する必要があります。

user-defined networkでコンテナを実行している場合、Dockerはコンテナ名をアドレスにマップするDNSサーバーを保持します。私が最初にネットワークを作成する場合には、次のとおりです。その後、

docker network create myapp_net 

、そのネットワークでのRabbitMQコンテナを起動します。

docker run -d --network myapp_net --hostname rabbitmqhost \ 
    --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management 

その後、そのネットワークで起動コンテナは、ホスト名を使用できるようになりますそのコンテナに接続するにはrabbitmqを入力します。デフォルトのネットワークで動作しているコンテナの

(コマンドライン上でノー--networkパラメータ)、あなたはhereを文書化して、類似した、しかし柔軟性に劣る、効果を達成するために--linkオプションを使用することができます。

+0

ありがとうございます。私は、上記の新しい標準的な方法であることに感謝しますが、--linkを使用して各サービスコンテナをウサギに接続しました。 – steve

+1

私はちょうどDockerネットワークソリューションの利点を強調したかっただけです: '--link'を使うとき、あなたのrabbitmqコンテナを止めれば、あなたのアプリは不運です。新しいrabbitmqを起動した後にコンテナを"再リンク "できませんコンテナ。一方、名前解決にDNSに依存するDockerネットワークを使用すると、新しいコンテナと同じ名前の新しいコンテナを起動すると、おそらくサービスが回復する可能性があります(アプリケーションコードが正常に切断を処理していることを前提とします) 。 – larsks

+0

ああ、それはとても良い点です、ありがとうございます。ネットワークソリューションを使用する場合、ウサギのアドレスとポートはどうなりますか?すなわちAMQ_PORT_5672_TCP_ADDRとAMQ_PORT_5672_TCP_PORTの等価物 – steve

関連する問題