dockerrabbitmq 在启动过程中崩溃

Wil*_*pez 6 python rabbitmq docker

启动(docker run)rabbitmq 镜像会导致崩溃。startup_err的内容:

  Crash dump was written to: erl_crash.dump
  init terminating in do_boot ()
Run Code Online (Sandbox Code Playgroud)

启动日志

  BOOT FAILED
   ===========

   Error description:
     {error,{cannot_create_mnesia_dir,"/var/lib/rabbitmq/mnesia/rabbit@localhost/",
                                eacces}}

   Log files (may contain more information):
        /var/log/rabbitmq/rabbit@localhost.log
        /var/log/rabbitmq/rabbit@localhost-sasl.log

   Stack trace:
       [{rabbit_mnesia,ensure_mnesia_dir,0,
               [{file,"src/rabbit_mnesia.erl"},{line,472}]},
       {rabbit_node_monitor,prepare_cluster_status_files,0,
                     [{file,"src/rabbit_node_monitor.erl"},{line,99}]},
        {rabbit,'-boot/0-fun-1-',0,[{file,"src/rabbit.erl"},{line,326}]},
        {rabbit,start_it,1,[{file,"src/rabbit.erl"},{line,354}]},
        {init,start_it,1,[]},
        {init,start_em,1,[]}]

         {"init terminating in do_boot",{rabbit,failure_during_boot,{error,            {cannot_create_mnesia_dir,"/var/lib/rabbitmq/mnesia/rabbit@localhost/",eacces}}}}
Run Code Online (Sandbox Code Playgroud)

这是 Dockerfile 的rabbitmq 部分:

  RUN apt-get install rabbitmq-server -y

  ENV RABBITMQ_CONFIG_FILE /etc/rabbitmq/rabbitmq
  ADD rabbitmq.config /etc/rabbitmq/rabbitmq.config

  # plugins --offline
  RUN /usr/sbin/rabbitmq-plugins enable rabbitmq_management
  RUN /usr/sbin/rabbitmq-plugins enable rabbitmq_shovel
  RUN /usr/sbin/rabbitmq-plugins enable rabbitmq_shovel_management

  EXPOSE 5672 15672 4369
  VOLUME ["/var/log/rabbitmq", "/var/lib/rabbitmq/mnesia"]
Run Code Online (Sandbox Code Playgroud)

这是 docker run 命令。rabbitmqbase 变量保存卷要映射到的主机(我的 OSX)目录的值。

  fab.local('docker run -itd -h rabbithost -p 5672:5672 -p 15672:15672 -p 4369:4369 -p 9001:9001 -v {}/data/mnesia:/var/lib/rabbitmq/mnesia -v {}/data/log:/var/log/rabbitmq --name rabbitmq dtwill/rabbitmq'.format(rabbitmqbase, rabbitmqbase))
Run Code Online (Sandbox Code Playgroud)

所以是的,它看起来像是一个配股问题......我不知道如何解决它。

[更新] 所以我认为这可能是 -h 参数,并尝试了 boot2docker ip、localhost 并将其全部删除 - 仍然崩溃。

谢谢!

ist*_*iuk 0

事实上,rabbitmq 无法写入/var/lib/rabbitmq/mnesia容器内部(映射到/data/mnesia主机上的rabbitmqbase +)。

其原因可能是/var/lib/rabbitmq/mnesia在 docker 挂载您的卷之前不存在。因此,挂载点是由docker创建的,但由与rabbitmq不同的用户拥有。

/var/lib/rabbitmq/mnesia在启动容器之前确保镜像中存在该文件。