You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中Monero daemon无故退出的技术求助

解决Monero Daemon容器启动后自动退出的问题

问题分析

从日志中的I EOF on stdin, exiting可以明确原因:monerod默认以交互模式运行,当检测到stdin关闭时会主动退出。此外还有两个潜在问题会影响后续RPC服务的连通性和数据持久化:

  • monerod的RPC默认绑定127.0.0.1,其他容器无法通过Docker网络访问
  • 区块链数据和钱包文件未做持久化,容器重启后会丢失数据

解决方案

1. 修改Monero Daemon的启动参数

更新monero_daemon/Dockerfile,添加非交互模式和全局绑定参数:

FROM alpine:latest

RUN apk update && apk add monero 

# 添加--non-interactive避免stdin关闭导致退出,--rpc-bind-ip允许其他容器访问
CMD ["monerod", "--non-interactive", "--rpc-bind-ip", "0.0.0.0"]

2. 给Daemon添加数据持久化卷

修改docker-compose.yaml中的monero_daemon服务,添加volume保存区块链数据:

monero_daemon:
  build: ./monero_daemon
  ports:
    - "18081:18081"
  volumes:
    - ./monero_blockchain:/root/.bitmonero  # 持久化区块链数据

3. 修复RPC钱包的生成与持久化

更新monero_rpc/Dockerfile,改为启动时检查钱包(避免构建镜像时生成的钱包在容器启动时无法访问),并允许RPC全局访问:

FROM alpine:latest

RUN apk update && apk add monero 

# 编写启动脚本:检查钱包是否存在,不存在则生成;启动RPC服务
RUN echo '#!/bin/sh
if [ ! -f /wallet/mywallet ]; then
    monero-wallet-cli --generate-new-wallet /wallet/mywallet --password "" --mnemonic-language English --non-interactive
fi
monero-wallet-rpc --daemon-port 18081 --daemon-host monero_daemon --wallet-file /wallet/mywallet --password "" --rpc-bind-port 18088 --rpc-bind-ip 0.0.0.0' > /start.sh && chmod +x /start.sh

CMD ["/start.sh"]

同时在docker-compose.yaml的monero_rpc服务中添加volume保存钱包:

monero_rpc:
  build: ./monero_rpc
  ports:
    - "18088:18088"
  depends_on:
    - monero_daemon
  volumes:
    - ./monero_wallet:/wallet  # 持久化钱包文件

4. 重新构建并启动服务

执行以下命令应用修改:

docker-compose down
docker-compose up --build

验证

启动后检查monero_daemon容器日志,若出现类似以下内容,说明服务正常运行:

I Starting p2p net loop...
I Syncing 12345/78901 blocks, 50% done

内容的提问来源于stack exchange,提问作者Soroush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 23:08:15