即使 docker 容器未运行,Neo4j 进程也会在后台运行

问题描述 投票:0回答:2

我正在开发我使用 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。一旦我有了一个容器,我只需启动/停止它以便将来使用它。

database docker neo4j graph-databases
2个回答
2
投票

正如评论中所说的,杀死容器比阻止它们更正常。由于 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
    

0
投票
对于那些使用 docker compose 的人添加以下内容

健康检查: 测试:[“CMD-SHELL”,“wget --no-verbose --tries=1 --spider localhost:7474 || exit 1”]

© www.soinside.com 2019 - 2024. All rights reserved.