在Docker映像中持久化RabbitMQ配置

在Docker映像中持久化RabbitMQ配置,rabbitmq,docker,Rabbitmq,Docker,在Docker映像中配置RabbitMQ是一场噩梦。当将RabbitMQ作为链接容器运行时,我可以连接到RabbitMQ接口,并成功配置vHost和权限,以便芹菜工人能够顺利连接 但是,重新启动Docker会丢失配置设置。如何保持这些设置 我尝试过的一些事情: 配置所有内容后,从导出将/etc/rabbitmq/rabbit.config写入Docker映像。RabbitMQ忽略了它。 使用ENV hostname localhost设置我的Docker文件中的主机名,但这似乎会干扰链接图中的D

在Docker映像中配置RabbitMQ是一场噩梦。当将RabbitMQ作为链接容器运行时,我可以连接到RabbitMQ接口,并成功配置vHost和权限,以便芹菜工人能够顺利连接

但是,重新启动Docker会丢失配置设置。如何保持这些设置

我尝试过的一些事情:

配置所有内容后,从导出将/etc/rabbitmq/rabbit.config写入Docker映像。RabbitMQ忽略了它。 使用ENV hostname localhost设置我的Docker文件中的主机名,但这似乎会干扰链接图中的Docker容器。
我做错了什么?是否有一个规范的Dockerfile,用于获取配置好的RabbitMQ docker容器,以便docker链接开发,最好使用Fig?

这是一篇老文章,但值得回答。很明显,在容器退出后,您没有提交容器。即使是这样,问题也可能是您正在启动一个香草容器,而不是以前提交的版本。查找docker commit和docker start,并与docker run进行对比

还要注意,Docker在将容器耦合到主机时会创建临时端口。当您需要与容器内的套接字通信时,客户端需要与之通信的配置可能会有所不同—例如,客户端需要使用的容器的端口号可以在每次重新启动提交的RabbitMQ容器时更改。集装箱港口与临时主机港口之间存在双向映射。这意味着主要是主机必须进行补偿。当然,除非您使用-p选项,或者在Dockerfile中正确配置EXPOSE(如果您使用的是自定义文件)。您正在使用一个,对吗?

如前所述:

这个问题似乎是由于Docker的每个新容器的默认主机名都发生了更改,而RabbitMQ实际上将配置绑定到主机名

所以关键是设置主机名

以下是docker compose的解决方案:

版本:“3” 服务: rabbitmq: image:rabbitmq:management
主机名:qsearchmq//rabbitmq服务器是否报告任何错误?通常情况下,它非常嘈杂:如果每次都手动配置RabbitMQ,客户端连接就不会出现问题。但如果我试图在Docker运行之间保持配置,我的芹菜客户端会抱怨连接到amqp://guest@/因为缺少vhost,所以使用password guest。我的问题已经两年了,所以我不记得所有的上下文,但我想并且仍然更喜欢配置一个香草Docker RabbitMQ映像,使用EXPORT挂载配置文件并启动容器,而不是生成包含配置机密的映像。重读我的问题,问题似乎更多地与虚拟主机有关。它甚至可以在更新版本的Docker中修复。