1

RabbitMQ と Docker/Fig の学習を始めたばかりです。Rabbit Server、Producer、および Consumer にそれぞれ 1 つずつ、3 つの fig コンテナーを使用した非常に単純な例があります。で、次のエイリアスに/etc/hosts設定しました:boot2docker ipdockerhost

/etc/hosts
192.168.59.103    dockerhost

fig up -dRabbitMQ サーバーの場合、すべてが正常に機能します。ブラウザを開いてdockerhost:PORTNUM、RabbitMQ コントロール パネルにアクセスできます。

私の RabbitMQ プロデューサーでは、接続ホストをdockerhost次のように設定しました。

/producer.py
connection = pika.BlockingConnection(pika.ConnectionParameters(
    host=config['RabbitMQ']['hostname'],
    ...
    ))

私の設定ファイルは次のようになります。

/config.ini
[RabbitMQ]
hostname    = dockerhost

ただしfig up -d、RabbitMQ プロデューサーで実行すると、接続エラーが発生します。

rabbitworker_1 |   File "/usr/local/lib/python3.4/site-packages/pika/adapters/blocking_connection.py", line 301, in _adapter_connect
rabbitworker_1 |     raise exceptions.AMQPConnectionError(error)
rabbitworker_1 | pika.exceptions.AMQPConnectionError: [Errno -2] Name or service not known`

エイリアスboot2docker ipの代わりに RabbitMQ ホスト名に直接入力することで、RabbitMQ プロデューサーを適切に動作させることができます。dockerhost

/config.ini
[RabbitMQ]
hostname    = 192.168.59.103

上記の変更により、すべてが適切に機能します。

私の質問はhostname = dockerhost、実際の IP アドレスを入力する代わりに、RabbitMQ プロデューサーを使用して動作させるにはどうすればよいですか?

アップデート

fig.ymlこれが動作する私のRabbitMQサーバーdockerhostです:

rabbit:
    image: mikaelhg/docker-rabbitmq
    ports:
     - "5672:5672"
     - "15672:15672"

そして、ここに私のRabbitMQプロデューサーがfig.ymlあり、Dockerfileこれは動作しませんdockerhost:

/fig.yml
rabbitworker:
    build: .
    volumes:
     - .:/opt/worker
     - ./log:/var/log
    command: supervisord -n

/Dockerfile
FROM python3-rabbit-producer

COPY . /opt/worker
WORKDIR /opt/worker

RUN pip3.4 install -r requirements.txt

CMD ["supervisord", "-n"]
4

1 に答える 1

1

fig.ymlfig を使用しているので、1 つの一意のファイルを作成し、それらが通信できるようにコンテナーをリンクすることで、fig の真の力を利用することをお勧めします。したがって、現在の RabbitMQ プロデューサーを編集して、次のfig.ymlようにします。

rabbit:
    image: mikaelhg/docker-rabbitmq
    ports:
     - "5672:5672"
     - "15672:15672”

rabbitworker:
    build: .
    volumes:
     - .:/opt/worker
     - ./log:/var/log
    links: 
       - rabbit
    command: supervisord -n

次に、構成ファイルを編集して次を取得します。

/config.ini
[RabbitMQ]
hostname    = rabbit

構成ファイルをそのままにして を使用したい場合は、次の方法dockerhostで rabbitworker リンクを編集できます。fig.yml

    links: 
       - rabbit:dockerhost

dockerhostただし、RabbitMQ サーバー コンテナー IP (ホスト IP ではなく) に解決されることに注意する必要があります。

于 2015-03-27T15:26:27.240 に答える