我有一个问题,用户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)
我做了类似的事情并且它仍然存在:
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 和 subshell 并没有让它变得明显。
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |