Docker中的RabbitMQ - 用户创建不会持久化

lol*_*ski 11 rabbitmq docker

我有一个问题,用户user1没有持久保存在我使用以下Dockerfile创建的容器中.这是什么原因?这是RabbitMQ的具体问题吗?例如,我必须明确指定必须持久保存用户

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
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 16

我知道这是一个老问题,但今天在这个问题上挣扎了几个小时并最终为我解决了:问题似乎是由于默认主机名在Docker的每个新容器中都发生了变化,而RabbitMQ实际上将配置绑定到主机名.

在设置用户之前,我在/etc/rabbitmq/rabbitmq-env.conf中设置了NODENAME变量:

# make the node name static
RUN echo 'NODENAME=rabbit@localhost' > /etc/rabbitmq/rabbitmq-env.conf
Run Code Online (Sandbox Code Playgroud)

现在它的工作原理.

希望它可以提供帮助.

编辑:

这是一个有效的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"]
Run Code Online (Sandbox Code Playgroud)

我的rabbitmq-env.conf文件:

NODENAME=rabbimq@localhost
Run Code Online (Sandbox Code Playgroud)

我的rabbitmq-setup.sh:

rabbitmqctl add_vhost myvhost && rabbitmqctl add_user myuser mypasswd && rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*" && rabbitmqctl set_user_tags myuser administrator
Run Code Online (Sandbox Code Playgroud)


sea*_*mcl 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
Run Code Online (Sandbox Code Playgroud)

您确定创建过程首先发生吗?sleep 和 subshel​​l 并没有让它变得明显。