web-dev-qa-db-ja.com

Docker RabbitMQの永続性

DockerのRabbitMQは、ボリュームのないコンテナを削除するとデータを失う

私のDockerfile:

FROM rabbitmq:3-management
ENV RABBITMQ_HIPE_COMPILE 1
ENV RABBITMQ_ERLANG_COOKIE "123456"
ENV RABBITMQ_DEFAULT_VHOST "123456"

私の実行スクリプト:

IMAGE_NAME="service-rabbitmq"
TAG="${REGISTRY_ADDRESS}/${IMAGE_NAME}:${VERSION}"

echo $TAG

docker rm -f $IMAGE_NAME

  docker run \
    -itd \
    -v "rabbitmq_log:/var/log/rabbitmq" \
    -v "rabbitmq_data:/var/lib/rabbitmq" \
    --name "service-rabbitmq" \
    --dns=8.8.8.8 \
    -p 8080:15672 \
    $TAG

コンテナを削除した後、すべてのデータが失われました。

永続的なデータを使用してDockerでrabbitmqを構成するにはどうすればよいですか?

12

Rabbitmqは、mnesiaディレクトリー内のフォルダー名の一部としてホスト名を使用します。 --hostname some-rabbitをdocker runに追加しますか?

私は同じ問題を抱えていて、答えを見つけました here

14
Pedro Mázala

TL; DR

これについてはtoo掘り下げませんでしたが、これを行う最も簡単な方法は、hostnameをPedroとして変更することです上記に言及。

より詳しい情報:

RABBITMQ_NODENAMEの使用

Dockerを介してRABBITMQ_NODENAME変数を編集する場合、Dockerホスト名はランダムハッシュとして生成されるため、hostnameも追加する必要があるようです。

RABBITMQ_NODENAME変数をmy-rabbitのような静的なものに変更すると、RabbitMQは"nxdomain not found"エラーのようなものをスローします。
my-rabbit@<docker_hostname_hash>。 Dockerのホスト名がわかっていて、そのようにRABBITMQ_NODENAME値に自動でプルできる場合は、my-rabbit@<docker_hostname_hash>でうまくいくと思います。


[〜#〜]更新[〜#〜]

以前言った

Dockerのホスト名がわかっていて、そのようにRABBITMQ_NODENAME値に自動でプルできる場合は、my-rabbit@<docker_hostname_hash>でうまくいくと思います。

デフォルトのdocker Host名が明示的に割り当てられていない場合、起動時にランダムに生成されるため、これは正確に説明されているようには機能しません。実際のハードルは、データディレクトリが正しく取得されるように、元の実行として正確に同じ<docker_hostname_hash>を使用することです。これは、動的/堅牢に実装するのは面倒です。以下で説明するように、明示的なホスト名を使用するのが最も簡単です。


代わりに、hostnameを選択した値に設定することもできます-たとえば、app-messaging-AND ALSORABBITMQ_NODENAME変数をrabbit@app-messagingのようなものに設定します。このようにして、データディレクトリで使用される完全なノード名を制御します。

ホスト名の使用

推奨

とはいえ、ホスト名を変更する理由[〜#〜] not [〜#〜]がある場合を除き、ホスト名のみを変更することは、データが確実にマウントされるようにするための最も簡単な方法です毎回同じポイント。

次のDocker Composeファイルを使用して、起動間でセットアップを正常に保持しています。

version: '3'
services:
  rabbitmq:
    hostname: 'mabbit'
    image: "${ARTIFACTORY}/rabbitmq:3-management"
    ports:
      - "15672:15672"
      - "5672:5672"
    volumes:
      - "./data:/var/lib/rabbitmq/mnesia/"
    networks:
      - rabbitmq

networks:
  rabbitmq:
    driver: bridge

これにより、作成ファイルの横にdataディレクトリが作成され、RabbitMQ設定が次のように保持されます。

./data/
  rabbit@mabbit/
  rabbit@mabbit-plugins-expand/
  [email protected]
  rabbit@mabbit-feature_flags

4
wileymab