为什么Neo4J docker身份验证不起作用

Dra*_*cas 6 authentication neo4j docker docker-compose

我想使用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:
Run Code Online (Sandbox Code Playgroud)

运行以下命令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.
Run Code Online (Sandbox Code Playgroud)

编辑2:

似乎首先删除关联的卷有效。现在,密码已更改。

但是,如果我docker-compose down随后docker-compose up更改了自己的密码,docker-compose file则问题再次出现。

因此,我认为,当存在卷时,通过docker-compose 多次更改密码时,我们需要删除卷中存在的auth文件。

要做到这一点 :

docker volume inspect <volume_name>
Run Code Online (Sandbox Code Playgroud)

你应该得到这样的东西:

[
    {
        "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"
    }
]
Run Code Online (Sandbox Code Playgroud)

如果您为容器命名并且卷不像我一样命名(neo4j,neo4j_data),则这显然是不同的。

重要的部分是确定体积的Mountpoint

在此卷中,您可以删除目录中的auth文件dbms

然后重新启动您的泊坞窗,一切都会正常。

小智 7

Neo4j 码头开发人员在这里。

发生这种情况的原因是NEO4J_AUTH环境变量没有设置数据库密码,它只设置了INITIAL密码。

如果您正在安装一个包含现有数据库的数据卷,则NEO4J_AUTH无效,因为该数据库已经有密码。听起来这就是您在这里遇到的情况。

围绕此功能的文档不是很好,我已经更新了它!请参阅:Neo4j docker 身份验证文档