RabbitMQ in Docker - user creation is not saved

I have a problem where user user1 not saved in the container that I created using the following Docker file. What is the reason for this? Is this a RabbitMQ problem? for example I must explicitly indicate that the user must be saved

 FROM dockerfile/rabbitmq # Define mount points. VOLUME ["/data/log", "/data/mnesia"] # Define working directory. WORKDIR /data RUN (rabbitmq-start &) && \ sleep 10 && \ rabbitmqctl add_user user1 password1 && \ rabbitmqctl set_user_tags user1 administrator && \ rabbitmqctl set_permissions -p / user1 ".*" ".*" ".*" && \ sleep 10 && \ rabbitmqctl stop && \ sleep 10 # Define default command. CMD ["rabbitmq-start"] # Expose ports. EXPOSE 5672 EXPOSE 15672 
+11
docker rabbitmq
source share
4 answers

I know this is an old question, but struggled with this problem for many hours and finally solved it for me: The problem seems to be related to changing the default hostname in each new container with Docker, and RabbitMQ actually binds the configuration to host name.

I set the NODENAME variable in the file / etc / rabbitmq / rabbitmq -env.conf before setting up the user:

 # make the node name static RUN echo 'NODENAME=rabbit@localhost' > /etc/rabbitmq/rabbitmq-env.conf 

and now it works.

Hope this helps.

EDIT:

Here is the working Dockerfile (copying the rabbitmq-env.conf file to the container):

 FROM ubuntu:latest RUN groupadd -r rabbitmq && useradd -r -d /var/lib/rabbitmq -m -g rabbitmq rabbitmq # add rabbitmq repo RUN apt-get update && \ apt-get install wget --assume-yes && \ wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc && \ sudo apt-key add rabbitmq-signing-key-public.asc && \ sed -i -e '1ideb http://www.rabbitmq.com/debian/ testing main\' /etc/apt/sources.list && \ apt-get update && \ apt-get install rabbitmq-server --assume-yes # Enable plugins RUN rabbitmq-plugins enable rabbitmq_management && \ rabbitmq-plugins enable rabbitmq_web_stomp && \ rabbitmq-plugins enable rabbitmq_mqtt # expose ports # Management EXPOSE 15672 # Web-STOMP plugin EXPOSE 15674 # MQTT: EXPOSE 1883 # configure RabbitMQ COPY ["rabbitmq-env.conf", "/etc/rabbitmq/rabbitmq-env.conf"] RUN chmod 755 /etc/rabbitmq/rabbitmq-env.conf # Create users for the apps COPY ["rabbitmq-setup.sh", "/tmp/rabbitmq/rabbitmq-setup.sh"] RUN mkdir /var/run/rabbitmq && \ chmod -R 755 /var/run/rabbitmq && \ chown -R rabbitmq:rabbitmq /var/run/rabbitmq && \ service rabbitmq-server start && \ sh /tmp/rabbitmq/rabbitmq-setup.sh && \ rm /tmp/rabbitmq/rabbitmq-setup.sh && \ service rabbitmq-server stop # start rabbitmq USER rabbitmq CMD ["rabbitmq-server", "start"] 

My rabbitmq-env.conf file :

 NODENAME=rabbimq@localhost 

My rabbitmq-setup.sh :

 rabbitmqctl add_vhost myvhost && rabbitmqctl add_user myuser mypasswd && rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*" && rabbitmqctl set_user_tags myuser administrator 
+16
source share

I am doing something similar and it is persisting:

 RUN service rabbitmq-server start ; \ rabbitmqctl add_vhost /sensu ; \ rabbitmqctl add_user sensu sensu ; \ rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*" ; \ service rabbitmq-server stop 

Are you sure that the creation process takes place first? Sleeps and subshells do not make it obvious.

0
source share

Why is there something similar in this dockerfile , but I can't get it to continue:

 RUN /usr/sbin/rabbitmq-server -detached && \ sleep 5 && \ rabbitmqctl add_user bunnyuser my_pass1 && \ rabbitmqctl add_user bunny-admin my_pass2 && \ rabbitmqctl set_user_tags bunny-admin administrator && \ rabbitmqctl set_permissions -p / bunnyuser ".*" ".*" ".*" 
0
source share

Since many people still have this problem (including me), I did this:

When creating, copy RabbitMQ database_dir to / var / lib / rabbitmq / mnesia / rabbit \ @ $ (hostname) in / root (everything in / root remains in memory) after setting up all users.

At run time, copy the database directory from / root to / var / lib / rabbitmq / mnesia.

Only drawbacks: changes made to the database in RabbitMQ will be reset at runtime. I have not found another way to do this with docker-compose.

Configure.sh (as the RUN command in the Docker file):

 echo "NODENAME=rabbit@message-bus" > /etc/rabbitmq/rabbitmq-env.conf echo "127.0.0.1 message-bus" >> /etc/hosts #prevents error that 'message-bus' node doesnt exist (this doesnt persist in /etc/hosts) rabbitmqctl add user ... #etc rabbitmqctl stop mkdir /root/rabbitmq_database cp -R /var/lib/rabbitmq/mnesia/rabbit\@message-bus/* /root/rabbitmq_database 

Runtime.sh (as an entry point to the Docker file):

 #copy database back from /root mkdir -p /var/lib/rabbitmq/mnesia/rabbit\@message-bus cp -R /root/rabbitmq_database/* /var/lib/rabbitmq/mnesia/rabbit\@message-bus rabbitmq-server 
0
source share

All Articles