我想使用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由于身份验证失败,客户端未经授权。具有正确的凭据(在我的docker-compose文件中使用的凭据)
此外,
当我将NEO4J_AUTH
设置为none
时,没有要求提供任何凭据。
当我将其设置为neo4j/neo4j
时,它说我无法使用默认密码
根据文档,这很好:
默认情况下,Neo4j需要身份验证,并且要求您在首次连接时使用neo4j / neo4j登录并设置新密码。 您可以通过在run指令中指定--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 up
,而我更改了docker-compose file
中的密码,则问题再次出现。
因此,我认为,当存在卷时,通过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),这显然是不同的。
重要的部分是 Mountpoint ,用于定位音量。
在此卷中,您可以删除auth
目录中的dbms
文件。
然后重新启动您的Docker,一切都会好起来。
答案 0 :(得分:4)
此处为Neo4j docker开发人员。
发生这种情况的原因是NEO4J_AUTH
环境变量未设置数据库密码,它仅设置了 INITIAL 密码。
如果要装入内部已有数据库的数据卷,则NEO4J_AUTH
无效,因为该数据库已具有密码。听起来这就是您在这里所经历的。
有关此功能的文档不是很好,我已经对其进行了更新!参见:Neo4j docker authentication documentation
答案 1 :(得分:1)
neo4j:
image: 'neo4j:4.1'
environment:
NEO4J_AUTH: 'neo4j/your_password'
ports:
- "7474:7474"
volumes:
...