2016-06-13 9 views
2

[OK]を、私はかなりDocker世界に新しいです。だからこれは非常に基本的な質問かもしれません。ホストマシンからDockerのサーバーに接続する方法は?

RabbitMQを実行しているDockerでコンテナを実行しています。このコンテナの名前が「うさぎのコンテナ」であるとしましょう。

RabbitMQのコンテナは、このコマンドで開始されました:

docker run -d -t -i --name rmq -p 5672:5672 rabbitmq:3-management 
2つの引数で

Pythonスクリプトコマンド:

python ~/Documents/myscripts/migrate_data.py amqp://rabbit:5672/ ~/Documents/queue/ 

今、私はいくつかを作成している私のホストマシンからPythonスクリプトを実行していますメッセージ。私はこれらのメッセージを私の「うさぎの容器」に送りたいです。したがって、私はホストマシン(Mac OSX)からこのコンテナに接続したいと思っています。

これも可能ですか?はいの場合、どうですか?

詳細が必要な場合は教えてください。

+0

コマンド 'docker run -d -t -i --name rmq -p 5672:5672 rabbitmq:3-management'を実行すると、' -p 5672:5672'オプションがDockerデーモンにあなたのバインドを要求しますhost-ip port 5672をコンテナポート5672に置き換えます。したがって、ホストから 'nc 127.0.0.1 5672'を試すと、' nc'がRabbitMQソケットに接続されていることがわかります。このソケットを使用して、ネットワークローカルスタック経由で通信できます。 – Auzias

答えて

2

だから、私は単にOSをホストするRMQリスニングポートをマッピングすることによってそれを解決:

docker run -d -t -i --name rmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management 

が、私は以前に私のコマンドでのみ-p 15672:15672を持っていました。これは管理UIをDockerコンテナからホストOSにマッピングしています。私は-p 5672:5672を追加しました。これはDockerコンテナからRabbitMQリスニングポートをホストOSにマッピングしました。

1

あなたのローカルOSXのシステムでは、このコンテナを実行している場合、あなたが実行して、デフォルトのドッキングウィンドウマシンのIPアドレスを見つける必要があります:

docker-machine ip default 

その後、あなたはそのアドレスを指すようにPythonスクリプトを変更することができますし、マップされたポートは<your_docker_machine_ip>:5672です。

これは、OSXとWindows上の仮想化エンジンでドッキングが動作するためです。そのため、ホストにポートをマップすると、仮想マシンに実際にマップされます。

+0

動作しませんでした。また、私はこの時点まで 'docker-machine'を実行していませんでした。それはなぜ必要なのですか? – Bhushan

+0

公式のdockerhubの画像ページhttps://hub.docker.com/_/rabbitmq/には、rabbitmq:3-managementがポート15672で実行されていることが記載されています。コンテナを停止して削除し、再びポートを正しくマッピングして実行します。 'http:// :15672'となります。ドッカーマシンの詳細については、公式ドキュメントを参照してください。https://docs.docker.com/machine/overview/ –

+0

@Bhushan 'docker-machine ls'を実行すると' default'は 'running'と表示されますか?ドッカーをOSXにインストールすると 'docker-machine'が表示されませんが、これはboot2docker仮想マシンがどのようにセットアップされ、管理されるかです(https://github.com/docker/toolbox/blob/fcdf7c37950dab9658556b1566b4363fa930878b/osx/ mpkg/quickstart.app/Contents/Resources/Scripts/start.sh)。 – Matt

0

あなたは前にドッカ・マシンを使用したことがないと言ったので、私は(あなたが一番上にあるメニューバーのドッキングウィンドウ、アイコンが表示されます)あなたがMac用ドッカーベータ版を使用していると仮定。

ウサギのドッキングランコマンドが正しいです。あなたは今、ウサギに接続する場合は、2つのオプションがあります。

  1. を新しい容器にあなたのPythonスクリプトをラップし、ウサギにリンク:私たちがリンクする必要があり

    docker run -it --rm --name migration --link rmq:rabbit -v ~/Documents/myscripts:/app -w /app python:3 python migrate_data.py

    注意rmq:rabbit、コンテナの名前をrmqとしますが、スクリプト内でrabbitを使用するためです。

  2. ホストマシンと使用ローカルホスト上のPythonスクリプトを実行します:5672

    python ~/Documents/myscripts/migrate_data.py amqp://localhost:5672/ ~/Documents/queue/

+0

ありがとうございました。はい、私はDocker Betaを使用しています。 RMQリスニングポートをホストOSにマッピングすることで私の問題を解決しました。私は別の答えとして私の発見を掲載しています。 – Bhushan

0

あなたは同様にあなたがしたい場合は、おそらく、曝露ポート5672と15672をコンテナを実行する必要があると思いますWebUI、および5671(SSLを使用している場合、またはrabbitmqでtcp listenerを追加するその他のポートを使用している場合) rabbitmqコンテナに特定のIPとホスト名があった方が簡単です。それはrabbitmq:3-management画像でポート5672があるように

docker run -d --net mynet123--ip 172.18.0.11 --hostname rmq1 --name rmq_container_name -p 15673:15672 rabbitmq:3-management

ノートのようなコンテナを起動した後にこれを行うには、あなたも(自分のドッカネットワーク

docker network create --subnet=172.18.0.0/16 mynet123

を作成する必要があるだろう、私がそれを使用したときだった)すでにそれを行う必要はありません。 --nameはコンテナ名用で、明らかにホスト名は--hostnameです。

これで、ホストからrmq1 rabbitmqサーバーに接続できます。

+0

助けてくれてありがとう。 RMQポートをホストOSにマッピングすることでこの問題を解決しました。 – Bhushan

関連する問題