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
相关产品推荐
相关产品推荐

