密钥斗篷8:已添加用户名“ admin”的用户

时间:2020-01-05 11:59:26

标签: docker jboss docker-compose keycloak

我无法使用ansible和docker-compose启动keycloak容器。我收到错误消息:用户名“ admin”的用户已添加到“ /opt/jboss/keycloak/standalone/configuration/keycloak-add-user.json”

我有3项艰巨的工作:

创建netwrok:

- name: Create a internal network
  docker_network:
    name: internal

设置postgres:

- name: "Install Postgres"
  docker_compose:
    project_name: posgressdb
    restarted: true
    pull: yes
    definition:
      version: '2'
      services:
        postgres:
          image: postgres:12.1
          container_name: postgres
          restart: always
          env_file:
            - /etc/app/db.env
          networks:
            - internal
          volumes:
            - postgres-data:/var/lib/postgresql/data
            - /etc/app/createdb.sh:/docker-entrypoint-initdb.d/init-app-db.sh
          ports:
            - "5432:5432"
      volumes:
        postgres-data:
      networks:
        internal:
          external:
            name: internal

创建密钥斗篷容器:

- name: Install keycloak
  docker_compose:
    project_name: appauth
    restarted: true
    pull: yes
    definition:
      version: '2'
      services:
        keycloak:
          image: jboss/keycloak:8.0.1
          container_name: keycloak
          restart: always
          environment:
            - DB_VENDOR=POSTGRES
            - DB_ADDR=postgres
            - DB_PORT=5432
            - DB_SCHEMA=public
            - DB_DATABASE=keycloak
            - DB_USER=keycloak
            - DB_PASSWORD=keycloak
            - KEYCLOAK_USER=admin
            - KEYCLOAK_PASSWORD=admin
          networks:
            - internal
      networks:
        internal:
          external:
            name: internal

有人知道我为什么会收到此错误吗?

编辑

如果我将密钥斗篷降级到版本7,它将正常启动!

13 个答案:

答案 0 :(得分:23)

只是为了阐明其他答案。我遇到过同样的问题。对我有用的是:

  1. 停止所有容器
  2. 注释两条相关行

    version: "3"
    
    services:
      keycloak:
        image: quay.io/keycloak/keycloak:latest
        environment:
          # KEYCLOAK_USER: admin
          # KEYCLOAK_PASSWORD: pass
          ...
    
  3. 启动所有容器;

  4. 等到keycloak容器成功启动
  5. 再次停止所有容器
  6. 从上方注释两行

    version: "3"
    
    services:
      keycloak:
        image: quay.io/keycloak/keycloak:latest
        environment:
          KEYCLOAK_USER: admin
          KEYCLOAK_PASSWORD: pass
          ...
    
  7. 启动所有容器

这一次(及以后的几次)成功了。 Keycloak正在运行,并且管理员用户已注册并按预期工作。

答案 1 :(得分:5)

在启动期间Keycloak被中断时会发生这种情况。此后,尝试添加管理员用户的命令开始失败。在Keycloak 7中这不是致命的,但是在8.0.1中,此行添加到/opt/jboss/tools/docker-entrypoint.sh中,这会中止整个启动脚本:

set -eou pipefail

相关问题:https://issues.redhat.com/browse/KEYCLOAK-12896

答案 2 :(得分:4)

我有同样的问题。在docker-compose中注释掉KEYCLOAK_USER env变量并更新堆栈后,容器再次启动。

docker_compose:
project_name: appauth
restarted: true
pull: yes
definition:
  version: '2'
  services:
    keycloak:
      image: jboss/keycloak:8.0.1
      container_name: keycloak
      restart: always
      environment:
        - DB_VENDOR=POSTGRES
        - DB_ADDR=postgres
        - DB_PORT=5432
        - DB_SCHEMA=public
        - DB_DATABASE=keycloak
        - DB_USER=keycloak
        - DB_PASSWORD=keycloak
        #- KEYCLOAK_USER=admin
        #- KEYCLOAK_PASSWORD=admin
      networks:
        - internal
  networks:
    internal:
      external:
        name: internal

答案 3 :(得分:2)

我使用 Keycloak 12,但在启动中断时我仍然看到此问题。我可以看到删除文件“keycloak-add-user.json”并重新启动容器有效。

想法是将这个逻辑集成到容器启动中。我开发了一个简单的自定义入口点脚本。

#!/bin/bash
set -e

echo "executing the custom entry point script"

FILE=/opt/jboss/keycloak/standalone/configuration/keycloak-add-user.json
if [ -f "$FILE" ]; then
    echo "keycloak-add-user.json exist, hence deleting it"
    rm $FILE
fi
echo "executing the entry point script from original image"
source  "/opt/jboss/tools/docker-entrypoint.sh"

并且我确保通过对 Entrypoint 的适当调整来重建 keycloak 图像 在初始部署期间在 Dockerfile 中。

ARG DEFAULT_IMAGE_BASEURL_APPS

FROM "${DEFAULT_IMAGE_BASEURL_APPS}/jboss/keycloak:12.0.1"

COPY custom-entrypoint.sh /opt/jboss/tools/custom-entrypoint.sh

ENTRYPOINT [ "/opt/jboss/tools/custom-entrypoint.sh" ]

由于我们的部署是内部部署,因此与开发团队的联系并不那么容易。我们的一线支持人员所能做的就是尝试重新启动我们部署的服务器。因此有了这种解决方法的想法。

答案 4 :(得分:0)

我已经通过 Thomas尝试过该解决方案,但有时它有时无法工作。

问题是启动时Keycloak找不到所需的数据库,因此正如Zmey所述,它被打断了。您是否尝试过第二项烦人的工作来添加const [updateName] = useMutation(updateNameD) const [updateAge] = useMutation(updateAgeD) const [updateCity] = useMutation(updateCityD) const [refetchPageData] = useLazyQuery(UsersDocument) Promise.all(updateName(), updateAge(), updatedCity()).then(res => { refetchPageData() })

同样的问题,但是使用docker-compose,我首先从postgres容器开始,以创建必要的数据库(手动步骤)depends_on: - postgres,然后我启动了整个设置docker-compose up postgres。 / p>

答案 5 :(得分:0)

解决这个问题的方法是在容器文件系统中将set -eou pipefail替换为# set -eou pipefail

以root用户身份登录我的Docker主机,然后编辑此搜索返回的每个文件:

find /var/lib/docker/overlay2 | grep /opt/jboss/tools/docker-entrypoint.sh

答案 6 :(得分:0)

Thomas Solutions 很好,但重新启动所有容器并重新启动毫无价值,因为我的 docker-compose 文件有 7 个服务。

我分两步解决了这个问题。

  1. 首先我像其他人一样推荐这两行代码
<块引用>
 #- KEYCLOAK_USER=admin
 #- KEYCLOAK_PASSWORD=admin
  1. 然后我在新终端上运行这个命令,它可以工作。
<块引用>

docker-compose up keycloak

keycloak 是一个 ServiceName

答案 7 :(得分:0)

根据我的发现,设置此默认用户的最佳方法是不是通过环境变量添加它,而是通过以下命令:

docker exec <CONTAINER> /opt/jboss/keycloak/bin/add-user-keycloak.sh -u <USERNAME> -p <PASSWORD>

根据the official documentation

答案 8 :(得分:0)

当我过去常常关闭 Portainer 中的 Keycloak 容器并试图让它们重新启动并运行时,我就遇到了这种情况。

我还可以通过在关闭容器(均在 Portainer 中)后“移除”容器然后运行 ​​<html> <body> <h1>PAGE CONTENT</h1> <footer> <center> <h1 id='footer'>FOOTER!</h1> </center> </footer> </body> </html> 来防止该错误。确保不要删除任何附加到您的容器的卷,否则您可能会丢失数据。

答案 9 :(得分:0)

对于遇到此问题的其他用户并且之前的答案都没有帮助,请检查您与数据库的连接,如果 keycloak 无法连接到数据库,通常会出现此错误。

使用 Docker 在 Keycloak 8 中进行测试。

答案 10 :(得分:0)

如果您想在服务器启动之前添加用户或希望它看起来像经典迁移,请使用传递的管理参数构建自定义图像

FROM quay.io/keycloak/keycloak:latest

ARG ADMIN_USERNAME
ARG ADMIN_PASSWORD

RUN /opt/jboss/keycloak/bin/add-user-keycloak.sh -u $ADMIN_USERNAME -p $ADMIN_PASSWORD

docker-compose:

  auth_service:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        ADMIN_USERNAME: ${KEYCLOAK_USERNAME}
        ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}

(不要将 KEYCLOAK_USERNAME/KEYCLOAK_PASSWORD 添加到环境部分)

答案 11 :(得分:-1)

我在 Docker 中运行 Keycloak "jboss/keycloak:11.0.3" 时遇到了这个问题,错误:

<块引用>

User with username 'admin' already added to '/opt/jboss/keycloak/standalone/configuration/keycloak-add-user.json'

附加信息,也在 Docker 中使用 PostgreSQL v13.2 运行。我为其他资源创建了一些架构,但我没有为 Keycloak 创建架构,所以解决方案是针对我的情况,在 postgres 中运行 create schema 命令

CREATE SCHEMA IF NOT EXISTS keycloak AUTHORIZATION postgres;

注意:希望这会有所帮助,本文中分享的其他解决方案均未解决我的问题。

答案 12 :(得分:-2)

您还可以停止容器并仅删除关联的卷。

如果您不知道该卷与您的密钥斗篷容器相关联,请运行:

docker-compose down
for vol in $(docker volume ls --format {{.Name}}); do
    docker volume rm $vol
done