系统重新启动后,Mnesia无法识别数据(no_exists错误)

我正在Docker容器中构build一个erlang应用程序。 我的数据目录作为docker卷连接。 我正在使用: application:set_env(mnesia, schema_location, disc),{disc_copies, Nodes}

当我重新启动应用程序:

 docker-composer stop myapp && docker-composer up myapp 

所有工作正常,但是当我完全closures它:

 sudo systemctl restart docker docker-composer up -d 

Mnesia停止识别我的数据。 重新启动计算机时也是如此。

基本上(在这个“硬”重启之后)Mnesia正常启动,但是当我尝试从它读取任何东西时,我得到一个错误:

 {running_method,getTasksByProjectId} terminate reason: {aborted,{no_exists,mtm_tasks}} terminate reason: {{aborted,{no_exists,mtm_tasks}}, {gen_server,call, [{global,tasks_da_serv}, {get_tasks_by_project_id, "j1xvqric-2oj2q784xieccowg8880"}]}} =ERROR REPORT==== 8-Jun-2017::10:29:04 === ** Generic server tasks_da_serv terminating ** Last message in was {get_tasks_by_project_id, "j1xvqric-2oj2q784xieccowg8880"} ** When Server state == {tasks_da_state} ** Reason for termination == ** {{aborted,{no_exists,mtm_tasks}}, [{mnesia,wrap_trans,6,[{file,"mnesia.erl"},{line,404}]}, {tasks_logic,get_tasks_by_project_id,1, [{file,"/release/_build/default/lib/tasks/src/tasks_logic.erl"}, {line,70}]}, {tasks_da_serv,handle_call,3, [{file,"/release/_build/default/lib/tasks/src/tasks_da_serv.erl"}, {line,52}]}, {gen_server,try_handle_call,4,[{file,"gen_server.erl"},{line,615}]}, {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,647}]}, {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]} Starting {global,tasks_da_serv} (<0.492.0>) Starting {global,tasks_manager_serv} (<0.497.0>) =ERROR REPORT==== 8-Jun-2017::10:29:04 === ** Generic server tasks_manager_serv terminating ** Last message in was {{'basic.deliver', <<"amq.ctag-pt-OySikx5BShVLRASvIPw">>,1,false, <<>>,<<"tasks">>}, {amqp_msg, {'P_basic',undefined,undefined,[],undefined, undefined,undefined,undefined,undefined, undefined,undefined,undefined,undefined, undefined,undefined}, <<"{\"correlationId\":\"j3oa5b84-pcxn9ld6mswsck8kw48\",\"replyTo\":\"amq.gen-8h_kLqz4sHB-qjJ2cj8Y6w\",\"method\":\"getTasksByProjectId\",\"params\":{\"projectId\":\"j1xvqric-2oj2q784xieccowg8880\"}}">>}} ** When Server state == {tasks_manager_state,<0.481.0>,<0.490.0>} ** Reason for termination == ** {{{aborted,{no_exists,mtm_tasks}}, {gen_server,call, [{global,tasks_da_serv}, {get_tasks_by_project_id,"j1xvqric-2oj2q784xieccowg8880"}]}}, [{gen_server,call,2,[{file,"gen_server.erl"},{line,204}]}, {tasks_manager_logic,handle_message,2, [{file,"/release/_build/default/lib/tasks/src/tasks_manager_logic.erl"}, {line,7}]}, {tasks_manager_serv,handle_info,2, [{file,"/release/_build/default/lib/tasks/src/tasks_manager_serv.erl"}, {line,45}]}, {gen_server,try_dispatch,4,[{file,"gen_server.erl"},{line,601}]}, {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,667}]}, {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]} 

此时,再次使其工作的唯一方法是从泊坞窗中删除数据。

我已经知道了。 问题是,docker是分配一个自定义主机名到容器和Mnesia光盘复制显然是绑定到主机名。 现在我已经修复了docker-compose.yaml文件中的主机名:

 version: '2' services: myapp: build: './myapp' hostname: 'myapp' volumes: ... 

现在可以重新启动它,而不会丢失数据。