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

时间:2019-03-13 22:47:39

标签: docker authentication neo4j 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:

使用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,一切都会好起来。

2 个答案:

答案 0 :(得分:4)

此处为Neo4j docker开发人员。

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

如果要装入内部已有数据库的数据卷,则NEO4J_AUTH无效,因为该数据库已具有密码。听起来这就是您在这里所经历的。

有关此功能的文档不是很好,我已经对其进行了更新!参见:Neo4j docker authentication documentation

答案 1 :(得分:1)

使用docker-compose定义Neo4j密码

neo4j:
   image: 'neo4j:4.1'
   environment:
      NEO4J_AUTH: 'neo4j/your_password'
   ports:
      - "7474:7474"
   volumes:
      ...