我正在开发我使用 Neo4j docker 镜像的项目。我从这里提取了图像:https://hub.docker.com/_/neo4j。问题是即使停止容器后,neo4j 进程仍继续运行。因此,当我运行
docker start neo4j_db
时,它不会启动,当我检查日志时,它会显示:
Neo4j is already running (pid:7).
Run with '--verbose' for a more detailed error message.
Neo4j is already running (pid:7).
Run with '--verbose' for a more detailed error message.
通过使用
docker inspect,
我发现它运行的初始命令是tini -g -- /startup/docker-entrypoint.sh neo4j
。我想停止这个全局 neo4j 进程,以便在运行 docker start neo4j_db
时,我可以在浏览器上使用它 http://localhost:7474
。
我是 Neo4j 的新手,所以我不知道如何继续。非常感谢任何帮助。
更新: 我采取的步骤顺序:
1. docker pull neo4j
2. docker run --name neo4j_db --publish=7474:7474 --publish=7687:7687 --volume=./neo4j:/neo4j/data -itd neo4j
3. docker stop neo4j_db # whenever I want to stop the container
4. docker start neo4j_db # whenever I want to start the container
另外,我还没有任何 dockerfile。一旦我有了一个容器,我只需启动/停止它以便将来使用它。
正如评论中所说的,杀死容器比阻止它们更正常。由于 neo4j 是一个数据库,您需要额外确保没有任何杂散容器仍在运行并写入您的数据,从而导致数据损坏。
为了让您的数据在容器之间持久存在, 将数据文件夹安装到/data
而不是
/neo4j/data
。 如果您将其安装到
/data
,那么 Neo4j 会自动将所有内容写入其中,您可以在未来的容器中使用相同的数据来继续上一个容器停止的地方。对于你的例子来说,一切都意味着你应该这样做:
docker kill neo4j_db
docker run -itd \
--name neo4j_db \
--publish=7474:7474 \
--publish=7687:7687 \
--volume=./neo4j:/data \
neo4j
健康检查: 测试:[“CMD-SHELL”,“wget --no-verbose --tries=1 --spider localhost:7474 || exit 1”]