我想通过docker-compose在docker中运行一个Neo4J实例。
docker-compose.yml
version: '3'
services:
neo4j:
container_name: neo4j-lab
image: neo4j:latest
environment:
- NEO4J_dbms_memory_pagecache_size=2G
- NEO4J_dbms_memory_heap_maxSize=4G
- NEO4J_dbms_memory_heap_initialSize=512M
- NEO4J_AUTH=neo4j/changeme
ports:
- 7474:7474
- 7687:7687
volumes:
- neo4j_data:/data
- neo4j_conf:/conf
- ./import:/import
volumes:
neo4j_data:
neo4j_conf:
使用 docker-compose up
运行以下内容是完全可以的,并且我可以访问登录界面。
但是当我设置凭据时,在容器日志中会出现以下错误:Neo.ClientError.Security.Unauthorized The client is unauthorized due to authentication failure. 而我确信我填写了正确的凭据(与我的 docker-compose 文件中使用的凭据相同)
此外,
当我将
NEO4J_AUTH
设置为none
时,不会要求输入凭据。当我将其设置为
neo4j/neo4j
时,则会说我不能使用默认密码
根据文档,这是完全正常的:
默认情况下,Neo4j 需要身份验证,要求您在第一次连接时使用 neo4j/neo4j 登录并设置新密码。 您可以通过在运行指令中指定 --env NEO4J_AUTH=neo4j/password 直接为 Docker 容器设置密码。或者,通过指定 --env NEO4J_AUTH=none 来禁用身份验证。
你有任何想法是怎么回事吗?
希望您能帮助我解决问题!
编辑
Docker 日志输出:
neo4j-lab | 2019-03-13 23:02:32.378+0000 INFO Starting...
neo4j-lab | 2019-03-13 23:02:37.796+0000 INFO Bolt enabled on 0.0.0.0:7687.
neo4j-lab | 2019-03-13 23:02:41.102+0000 INFO Started.
neo4j-lab | 2019-03-13 23:02:43.935+0000 INFO Remote interface available at http://localhost:7474/
neo4j-lab | 2019-03-13 23:02:56.105+0000 WARN The client is unauthorized due to authentication failure.
编辑2:
看起来先删除关联的卷会奏效。现在已经更改了密码。
但是,如果我运行docker-compose down
然后在我更改docker-compose文件
中的密码后运行docker-compose up
,问题会再次出现。
因此,我认为当我们通过docker-compose 多次更改密码时,只要存在一个卷,我们就需要删除卷中存在的auth
文件。
做法如下:
docker volume inspect <volume_name>
你应该得到类似于这样的东西:
[
{
"CreatedAt": "2019-03-14T11:17:08+01:00",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "neo4j",
"com.docker.compose.volume": "neo4j_data"
},
"Mountpoint": "/data/docker/volumes/neo4j_neo4j_data/_data",
"Name": "neo4j_neo4j_data",
"Options": null,
"Scope": "local"
}
]
如果您的容器和卷的命名不像我一样(neo4j,neo4j_data),那么情况显然是不同的。
重要的部分是Mount point,它定位了卷。
在此卷中,您可以删除位于dbms
目录中的auth
文件。
然后重新启动您的Docker,一切都应该没问题了。
changeme
。 - Mostafa Hussein