5

我正在使用 Dockerfile 构建一个映像,我想在安装后立即将用户添加到 RabbitMQ。问题是在构建 docker 容器的主机名期间与我运行生成的图像时不同。RabbitMQ 失去该用户;由于更改了主机名,它使用了另一个数据库。

我不会从容器内部更改/etc/hosts和文件,并且/etc/hostname看起来 RabbitMQ 没有选择我对变量的更改。RABBITMQ_NODENAMEHOSTNAME

我发现唯一有效的是在启动 RabbitMQ 代理之前运行它:

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

但是我将不得不一直运行更改主机名的 docker 映像。

docker run -h="localhost" image

关于可以做什么的任何想法?也许解决方案是将用户添加到 RabbitMQ 而不是在构建时而是在图像运行时?

4

4 回答 4

6

Just here is example how to configure from Dockerfile properly:

ENV HOSTNAME localhost

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

This is remember your config.

于 2014-01-17T11:53:53.430 回答
1

是的,我建议在容器第一次运行时添加用户。

您可以运行一个包装脚本来处理所有设置,然后再启动 RabbitMQ,而不是直接启动 RabbitMQ。如果包装脚本的最后一步是进程启动,请记住您可以使用exec新进程替换脚本本身。

于 2013-09-25T05:50:37.367 回答
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

操作系统-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 ,我在启动服务器和添加用户之前在 Dockerfile 中添加了这个命令RUN mkdir /data 。

于 2021-07-01T11:16:38.073 回答