2014-11-06 12 views
8

Mam problem polegający na tym, że użytkownik user1 nie jest przechowywany w kontenerze, który utworzyłem przy użyciu następującego pliku Dockerfile. Jaki jest tego powód? Czy jest to specyficzny problem RabbitMQ? na przykład Muszę wyraźnie określić, że użytkownik musi być utrwaloneRabbitMQ w Docker - tworzenie użytkownika nie trwało.

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

Czy znalazłeś rozwiązanie tego problemu? Szukam tego samego. – Marco

Odpowiedz

0

zrobić coś podobnego i to nie ustępuje:

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

Czy jesteś pewien, że proces tworzenia odbywa się w pierwszej kolejności? Uśpienia i podpowłoki nie wyjaśniają tego.

+0

Tak, próbowałem zbudować obraz za pomocą Twojego kodu i sprawdzić listę użytkowników za pomocą 'docker exec -ti rmq rabbitmqctl list_users' i nie mogłem znaleźć nowo utworzonego użytkownika. Czy czegoś brakuje? – lolski

+0

Nie jestem ekspertem od królików, przepraszam. Próbowałbym przeszukiwać logi królika dla wskazówek. – seanmcl

0

Na co warto, coś podobnego odbywa się w this dockerfile, ale nie mogę zmusić go do utrzymują się albo:

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

Witam. Czy znajdujesz poprawny plik Dockerfile, który pozwala przechowywać wiele accoundt i uprawnień? –

13

Wiem, że to stare pytanie, ale zmagał się przez wiele godzin z tym dzisiaj problemu i wreszcie rozwiązał to dla mnie: Problem wydaje się wynikać z domyślnej nazwy hosta zmieniającej się przy każdym nowym kontenerze z Dockerem, a RabbitMQ faktycznie wiąże konfigurację z nazwą hosta.

ustawić zmienną NODENAME w /etc/rabbitmq/rabbitmq-env.conf przed utworzeniem użytkownika:

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

i teraz działa.

Mam nadzieję, że to pomoże.

EDIT:

Tu jest praca Dockerfile (kopiując plik RabbitMQ-env.conf do kontenera):

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

Moja RabbitMQ-env.conf pliku:

[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

Czy możesz udostępnić plik Docker? Szukam rozwiązania dla tego samego problemu. Moi użytkownicy nie upierają się. – Marco

+0

@Marco: jasne, zobacz moją zredagowaną odpowiedź;) Prawdopodobnie będziesz musiał ujawnić potrzebne porty i włączyć/wyłączyć wtyczki. – Ben

+0

Pamiętaj, że musisz zachować ostrożność podczas generowania plików w systemie Windows. Upewnij się, że wszystkie pliki używają tylko końcówek linii LF. Potrzebowałem tylko 1 godziny, aby się zorientować, że rabbitmq szukał nazwy hosta o nazwie "localhost \ R" (rabbitmq-env.conf). – BlaM

0

Ponieważ wiele osób nadal masz ten problem (w tym mnie), co zrobiłem, było:

Na budynku skopiuj database_dir RabbitMQ w/var/lib/rabbitmq/mnesia/rabbit \ @ $ (nazwa hosta) do/root (wszystko w katalogu/root pozostało) po skonfigurowaniu wszystkich użytkowników.

Przy runtime skopiuj katalog z powrotem do katalogu/root do/var/lib/rabbitmq/mnesia.

Jedyne wady: zmiany wprowadzone do bazy danych w RabbitMQ zostaną zresetowane w czasie wykonywania. Nie znalazłem innego sposobu na zrobienie tego z docker-compose.

Configure.sh (RUN polecenie 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 

Czas trwania.sh (jako punkt początkowy w 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