5

Dockerfile を使用してイメージをビルドしています。インストール直後に RabbitMQ にユーザーを追加したいと考えています。問題は、ビルド中の docker コンテナーのホスト名が、結果のイメージを実行したときと異なることです。RabbitMQ はそのユーザーを失います。ホスト名が変更されたため、別のDBを使用します。

コンテナー内からのファイルの変更/etc/hosts/etc/hostname認識しておらず、RabbitMQ が変数への変更RABBITMQ_NODENAMEを選択していないようです。HOSTNAME

RabbitMQ ブローカーを開始する前に、これを実行することだけで動作することがわかりました。

echo "NODENAME=rabbit@localhost" >> /etc/rabbitmq/rabbitmq.conf.d/ewos.conf

ただし、ホスト名を変更してdockerイメージを常に実行する必要があります。

docker run -h="localhost" image

何ができるかについてのアイデアはありますか?おそらく解決策は、ビルド時ではなくイメージ実行時にユーザーをRabbitMQに追加することですか?

4

4 に答える 4

6

Dockerfile から適切に構成する方法の例を次に示します。

ENV HOSTNAME localhost

RUN /etc/init.d/rabbitmq-server start ; rabbitmqctl add_vhost /test; /etc/init.d/rabbitmq-server stop

これはあなたの設定を覚えています。

于 2014-01-17T11:53:53.430 に答える
1

これが私がやった方法です。

Dockerfile

FROM debian:jessie

MAINTAINER Francesco Casula <fra.casula@gmail.com>

VOLUME ["/var/www"]
WORKDIR /var/www

ENV HOSTNAME my-docker
ENV RABBITMQ_NODENAME rabbit@my-docker

COPY scripts /root/scripts

RUN /bin/bash /root/scripts/os-setup.bash && \
    /bin/bash /root/scripts/install-rabbitmq.bash

CMD /etc/init.d/rabbitmq-server start && \
    /bin/bash

os-setup.bash

#!/bin/bash

echo "127.0.0.1 localhost" > /etc/hosts
echo "127.0.1.1 my-docker" >> /etc/hosts

echo "my-docker" > /etc/hostname

インストール-rabbitmq.bash

#!/bin/bash

echo "NODENAME=rabbit@my-docker" > /etc/rabbitmq/rabbitmq-env.conf

echo 'deb http://www.rabbitmq.com/debian/ testing main' | tee /etc/apt/sources.list.d/rabbitmq.list
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | apt-key add -
apt-get update

cd ~
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server_3.6.5-1_all.deb
dpkg -i rabbitmq-server_3.6.5-1_all.deb
apt-get install -f -y

/etc/init.d/rabbitmq-server start

sleep 3

rabbitmq-plugins enable amqp_client mochiweb rabbitmq_management rabbitmq_management_agent \
                        rabbitmq_management_visualiser rabbitmq_web_dispatch webmachine

rabbitmqctl delete_user guest
rabbitmqctl add_user bunny password
rabbitmqctl set_user_tags bunny administrator
rabbitmqctl delete_vhost /
rabbitmqctl add_vhost symfony_prod
rabbitmqctl set_permissions -p symfony_prod bunny ".*" ".*" ".*"
rabbitmqctl add_vhost symfony_dev
rabbitmqctl set_permissions -p symfony_dev bunny ".*" ".*" ".*"
rabbitmqctl add_vhost symfony_test
rabbitmqctl set_permissions -p symfony_test bunny ".*" ".*" ".*"

/etc/init.d/rabbitmq-server restart

IS_RABBIT_INSTALLED=`rabbitmqctl status | grep RabbitMQ | grep "3\.6\.5" | wc -l`

if [ "$IS_RABBIT_INSTALLED" = "0" ]; then
    exit 1
fi

IS_RABBIT_CONFIGURED=`rabbitmqctl list_users | grep bunny | grep "administrator" | wc -l`

if [ "$IS_RABBIT_CONFIGURED" = "0" ]; then
    exit 1
fi

-hフラグを使用して適切なホストを指定して、コンテナーを実行することを忘れないでください。

docker run -h my-docker -it --name=my-docker -v $(pwd)/htdocs:/var/www my-docker
于 2016-11-24T14:14:50.860 に答える
0

私を助けた唯一のことは、 MNESIA_BASEプロパティのrabbitmq-env.conf のデフォルト値をMNESIA_BASE=/dataに変更することでした。サーバーを起動してユーザーを追加する前に、このコマンドRUN mkdir /dataを Dockerfile に追加しました。

于 2021-07-01T11:16:38.073 に答える