2014-11-06 16 views
8

Ho un problema in cui l'utente user1 non è persistente nel contenitore che ho creato utilizzando il seguente Dockerfile. Qual è la ragione di questo? Si tratta di un problema specifico di RabbitMQ? per esempio. Devo specificare esplicitamente che un utente deve essere mantenutaRabbitMQ in Docker - creazione utente non persistente

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

Hai trovato una soluzione a questo problema? Sto cercando la stessa cosa. – Marco

risposta

0

faccio qualcosa di simile e persiste:

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

Sei sicuro il processo di creazione si verifica in primo luogo? I posti letto e le subshell non lo rendono ovvio.

+0

Sì, ho provato a creare un'immagine utilizzando il codice e ispezionare l'elenco dell'utente utilizzando 'docker exec -ti rmq rabbitmqctl list_users' e non è stato possibile trovare l'utente appena creato. Mi sto perdendo qualcosa? – lolski

+0

Non sono affatto un esperto di rabbitmq, mi dispiace. Proverò a cercare i log di rabbitmq per suggerimenti. – seanmcl

0

Per quello che vale la pena, qualcosa di simile è fatto in this dockerfile, ma non posso farlo a persistere uno:

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

Ciao. Trovate il Dockerfile corretto che consente di memorizzare più permessi e autorizzazioni? –

13

Lo so che è una vecchia questione, ma ha lottato per ore con questo problema oggi e finalmente risolto per me: Il problema sembra essere dovuto al nome host predefinito che cambia in ogni nuovo contenitore con Docker, e RabbitMQ lega effettivamente la configurazione al nome host.

ho impostato la variabile NODENAME in /etc/rabbitmq/rabbitmq-env.conf prima di impostare l'utente:

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

e ora funziona.

Spero che possa essere d'aiuto.

EDIT:

Qui è un lavoro Dockerfile (copia di un file RabbitMQ-env.conf al contenitore):

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

mio RabbitMQ-env.conf di file:

[email protected] 

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

Potresti condividere il tuo Dockerfile? Sto cercando di trovare una soluzione per lo stesso problema. I miei utenti non vengono persi. – Marco

+0

@Marco: sicuro, vedi la mia risposta modificata;) Probabilmente dovrai esporre le porte di cui hai bisogno e abilitare/disabilitare i plugin. – Ben

+0

Nota che devi fare attenzione se generi i tuoi file con Windows. Assicurarsi che tutti i file utilizzino solo terminazioni di linea LF. Avevo solo bisogno di 1 ora per capire che rabbitmq stava cercando un nome host chiamato "localhost \ R" (rabbitmq-env.conf). – BlaM

0

Perché molte persone sono ancora avendo questo problema (me compreso), quello che ho fatto è stato:

A costruzione, copiare il database_dir RabbitMQ in/var/lib/rabbitmq/mnesia/rabbit \ @ $ (hostname) a/root (tutto rimane in/root rimane persistente) dopo aver configurato tutti gli utenti.

Al runtime, copiare la directory del database da/root a/var/lib/rabbitmq/mnesia.

Solo svantaggi: le modifiche apportate al database in RabbitMQ verranno ripristinate in fase di esecuzione. Tuttavia non ho trovato altro modo per farlo con docker-compose.

Configure.sh (come RUN comando nel 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 

runtime.sh (come entrypoint in Dockerfile):

#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 
Problemi correlati