Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何在启动时在RabbitMQ中创建队列_Docker_Rabbitmq - Fatal编程技术网

Docker 如何在启动时在RabbitMQ中创建队列

Docker 如何在启动时在RabbitMQ中创建队列,docker,rabbitmq,Docker,Rabbitmq,我试图在docker容器内启动RMQ,使用预创建的队列qwer 在此之前,我使用的是simpledocker compose.yml文件: rabbit: image: rabbitmq:management-alpine environment: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest 它工作得很好,只是在开始时没有预先创建队列。 现在我已经切换到自定义图像,使用以下Docke

我试图在docker容器内启动RMQ,使用预创建的队列
qwer

在此之前,我使用的是simple
docker compose.yml
文件:

rabbit:
    image: rabbitmq:management-alpine
    environment:
      RABBITMQ_DEFAULT_USER: guest
      RABBITMQ_DEFAULT_PASS: guest
它工作得很好,只是在开始时没有预先创建队列。 现在我已经切换到自定义图像,使用以下
Dockerfile

FROM rabbitmq:management-alpine

ADD rabbitmq.conf /etc/rabbitmq/
ADD definitions.json /etc/rabbitmq/

RUN chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf /etc/rabbitmq/definitions.json
其中,
rabbitmq.conf
是v3.7+sysctl样式的配置,行为:

management.load_definitions = /etc/rabbitmq/definitions.json
definitions.json
包含创建队列的尝试:

{
    "vhosts":[
        {"name":"/"}
    ],
    "queues":[
        {"name":"qwer","vhost":"/","durable":true,"auto_delete":false,"arguments":{}}
    ]
}
现在它开始拒绝登录:

Error on AMQP connection <0.660.0> (172.18.0.6:48916 -> 172.18.0.10:5672, state: starting):
PLAIN login refused: user 'guest' - invalid credentials
AMQP连接上的
错误(172.18.0.6:48916->172.18.0.10:5672,状态:启动):
普通登录被拒绝:用户“来宾”-凭据无效
我认为任务有点简单,但兔子本身的配置过程是最复杂的任务,文档也有点不清楚

即使经过4天的试用和谷歌搜索,我也不知道该怎么做


您能否帮助我,如何编写配置文件,以便创建队列并保持连接和对话的能力?

实际上您已经差不多做到了

RabbitMQ有一条规则,即“来宾”用户只能从本地主机进行连接。因为您是在docker上运行它,所以我假设您试图通过以下操作从外部访问它:docker run-p 15672:15672

所以要解决这个问题,你需要做的是创建一个具有管理员权限的用户

首先,改变这一点:

rabbit:
    image: rabbitmq:management-alpine
    environment:
      RABBITMQ_DEFAULT_USER: user
      RABBITMQ_DEFAULT_PASS: password
您可以使用ath,我使用用户/密码作为您的用户/密码

在Dockerfile中,如果不想在每次运行时公开,可以添加:
EXPOSE 15672

最后,对definitions.json文件进行如下修改:

{
    "users": [
      {
        "name": "user",  
        "password_hash": "password",
        "hashing_algorithm": "rabbit_password_hashing_sha256",
        "tags": "administrator"
      }
    ],

    "vhosts":[
        {"name":"/"}
    ],
    "queues":[
        {"name":"qwer","vhost":"/","durable":true,"auto_delete":false,"arguments":{}}
    ]
}
让我知道进展如何

看看这个

使用此Dockerfile:

FROM rabbitmq

# Define environment variables.
ENV RABBITMQ_USER user
ENV RABBITMQ_PASSWORD password

ADD init.sh /init.sh
EXPOSE 15672

# Define default command
CMD ["/init.sh"]
并使用此init.sh:

#!/bin/sh

# Create Rabbitmq user
( sleep 5 ; \
rabbitmqctl add_user $RABBITMQ_USER $RABBITMQ_PASSWORD 2>/dev/null ; \
rabbitmqctl set_user_tags $RABBITMQ_USER administrator ; \
rabbitmqctl set_permissions -p / $RABBITMQ_USER  ".*" ".*" ".*" ; \
echo "*** User '$RABBITMQ_USER' with password '$RABBITMQ_PASSWORD' completed. ***" ; \
echo "*** Log in the WebUI at port 15672 (example: http:/localhost:15672) ***") &

# $@ is used to pass arguments to the rabbitmq-server command.
# For example if you use it like this: docker run -d rabbitmq arg1 arg2,
# it will be as you run in the container rabbitmq-server arg1 arg2
rabbitmq-server $@

你好,谢谢你的意见。它在导入用户时崩溃。。。具有0个邻居的崩溃报告进程退出,原因为:{error,>}在应用程序\u master:init/4第138行[info]应用程序兔子退出,原因为:{error,>}我已将
用户
密码重命名为
来宾
来宾
,因为所有堆栈都配置为使用该凭据连接是通过端点完成的:
amqp://guest:guest@兔子:5672/
密码\u散列
更改为
密码
,添加了
环回\u用户=无
。现在出现了另一个问题:
用户“guest”拒绝访问vhost“/”
编辑了我的答案,请查看该链接。您需要将“user”添加到vhost/“