Docker容器停止后Neo4j进程仍后台运行的解决求助
解决Docker容器停止后Neo4j残留进程导致无法启动的问题
问题现象
使用官方Neo4j Docker镜像创建容器后,执行docker stop neo4j_db停止容器,再次执行docker start neo4j_db时无法启动,容器日志显示:
Neo4j is already running (pid:7).
Run with '--verbose' for a more detailed error message.
解决步骤
方法一:杀掉容器内残留的Neo4j进程
- 执行以下命令,启动临时容器并共享目标容器的PID命名空间,杀掉残留的进程(pid:7):
docker run --rm -it --pid=container:neo4j_db alpine:latest kill 7
- 再次启动容器:
docker start neo4j_db
- 验证:访问
http://localhost:7474确认Neo4j正常运行。
方法二:重建容器(数据不会丢失)
如果方法一无效,可直接重建容器(因为已挂载本地卷存储数据,数据不会丢失):
- 删除故障容器:
docker rm neo4j_db
- 用原命令重新创建容器:
docker run --name neo4j_db --publish=7474:7474 --publish=7687:7687 --volume=./neo4j:/neo4j/data -itd neo4j
问题原因与预防
出现该问题通常是因为Neo4j进程未正确响应Docker发送的终止信号(SIGTERM),导致进程脱离容器初始化进程(tini)的管理,成为残留后台进程。后续停止容器时可增加超时时间,给Neo4j足够的优雅关闭时间:
docker stop -t 30 neo4j_db
内容的提问来源于stack exchange,提问作者lokesh bihani
相关产品推荐
相关产品推荐

