docker rabbitmq主机名问题

我使用Dockerfile构build一个图像,并且我想在安装后立即将用户添加到RabbitMQ。 问题是,在构build期间docker容器的主机名是不同的,当我运行生成的图像。 RabbitMQ丢失该用户; 由于改变主机名,它使用另一个数据库。

我不会更改容器内的/etc/hosts/etc/hostname文件,而且看起来RabbitMQ不会select对RABBITMQ_NODENAMEHOSTNAMEvariablesRABBITMQ_NODENAME更改。

我发现唯一的工作就是在启动RabbitMQ代理之前运行它:

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

但是,我将不得不随时更改主机名来运行docker映像。

 docker run -h="localhost" image 

任何想法可以做什么? 也许解决scheme是添加用户到RabbitMQ不build立,但在图像运行?

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

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

就在这里举例说明如何正确configurationDockerfile:

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

这是记住你的configuration。

我就是这么做的

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