2014-11-06 2 views
8

У меня проблема, когда пользователь user1 не сохраняется в контейнере, который я создал, используя следующий файл Docker. Что является причиной этого? Является ли это проблемой RabbitMQ? например Я должен явно указать, что пользователь должен быть сохраненRabbitMQ in Docker - создание пользователя не сохраняется

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 
+0

Вы нашли решение этой проблемы? Я ищу то же самое. – Marco

ответ

0

я сделать что-то подобное, и она сохраняется:

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

Вы уверены, что процесс создания происходит в первую очередь? Спит и подоболочки не делают это очевидным.

+0

Да, я попытался создать изображение с помощью вашего кода и проверить список пользователей, используя 'docker exec -ti rmq rabbitmqctl list_users' и не смог найти вновь созданного пользователя. Я что-то упускаю? – lolski

+0

Я вообще не специалист по кроликам, извините. Я бы попытался выполнить поиск в журналах rabbitmq для подсказок. – seanmcl

0

За что стоит, что-то подобное происходит в this dockerfile, но я не могу заставить его сохраняться либо:

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

Привет. Вы находите правильный файл Docker, который позволяет хранить несколько лицензий и разрешений? –

13

Я знаю, что это старый вопрос, но изо всех сил в течение нескольких часов с этой проблемой сегодня и наконец решил это для меня: Проблема, похоже, связана с изменением имени хоста по умолчанию в каждом новом контейнере с Docker, а RabbitMQ фактически привязывает конфигурацию к имени хоста.

я установить переменную NODENAME в /etc/rabbitmq/rabbitmq-env.conf перед установкой пользователя:

# make the node name static 
RUN echo '[email protected]' > /etc/rabbitmq/rabbitmq-env.conf 

и теперь он работает.

Надеюсь, это поможет.

EDIT:

Здесь рабочий Dockerfile (копирование RabbitMQ-env.conf файл в контейнере):

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"] 

Мой RabbitMQ-env.conf файл:

[email protected] 

Мой rabbitmq-setup.sh:

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

Не могли бы вы поделиться файлом Dockerfile? Я ищу, чтобы найти решение для той же проблемы. Мои пользователи не сохраняются. – Marco

+0

@Marco: обязательно, см. Мой отредактированный ответ;) Вам, вероятно, придется разоблачить нужные вам порты и включить/отключить плагины. – Ben

+0

Обратите внимание, что вам нужно быть осторожным, если вы создаете свои файлы в Windows. Убедитесь, что все файлы используют только окончания строки LF. Мне просто понадобилось 1 час, чтобы выяснить, что rabbitmq ищет имя хоста, называемое «localhost \ R» (rabbitmq-env.conf). – BlaM

0

Потому что многие люди до сих пор с этой проблемой (включая меня), что я сделал:

В здании скопируйте RabbitMQ database_dir в/вар/lib/rabbitmq/mnesia/rabbit \ @ $ (имя хоста) в/root (все в/root сохраняется) после настройки всех пользователей.

В время выполнения, скопируйте базу данных из корня в/var/lib/rabbitmq/mnesia.

Только недостатки: изменения, внесенные в базу данных в RabbitMQ, будут сброшены во время выполнения. Однако я не нашел другого способа сделать это с помощью докер-компоновки.

Configure.sh (как команда RUN в Dockerfile):

echo "[email protected]" > /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 

время выполнения.sh (в качестве точки входа в файл Docker):

#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 
Смежные вопросы