【问题标题】:Why Neo4J docker authentication doesn't work为什么 Neo4J docker 身份验证不起作用
【发布时间】:2019-08-04 17:51:06
【问题描述】:

我想使用 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 登录并设置新密码。 您可以通过在运行指令中指定 --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

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

然后重启你的docker,一切都会好起来的。

【问题讨论】:

  • docker 日志输出是什么?
  • 我将我的 docker 日志输出放在原始消息中;)
  • 似乎用密码不是changeme的旧数据启动了容器
  • 我已经测试了相同的设置,它按预期工作
  • 我终于找到了我的问题的原因,我让你看看我的编辑2。:)

标签: docker authentication neo4j docker-compose


【解决方案1】:

这里是 Neo4j docker 开发者。

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

如果您要挂载包含现有数据库的数据卷,则NEO4J_AUTH 无效,因为该数据库已经有密码。听起来这就是您在这里所经历的。

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

【讨论】:

    【解决方案2】:

    使用 docker-compose 定义 Neo4j 密码

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

    【讨论】:

    • 容器内密码更改时出现问题。通过 docker-compose 提供密码使其成为静态密码。
    猜你喜欢
    • 2019-10-31
    • 2019-04-08
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多