我无法使用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,它将正常启动!
答案 0 :(得分:23)
只是为了阐明其他答案。我遇到过同样的问题。对我有用的是:
注释两条相关行
version: "3"
services:
keycloak:
image: quay.io/keycloak/keycloak:latest
environment:
# KEYCLOAK_USER: admin
# KEYCLOAK_PASSWORD: pass
...
启动所有容器;
从上方注释两行
version: "3"
services:
keycloak:
image: quay.io/keycloak/keycloak:latest
environment:
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: pass
...
这一次(及以后的几次)成功了。 Keycloak正在运行,并且管理员用户已注册并按预期工作。
答案 1 :(得分:5)
在启动期间Keycloak被中断时会发生这种情况。此后,尝试添加管理员用户的命令开始失败。在Keycloak 7中这不是致命的,但是在8.0.1中,此行添加到/opt/jboss/tools/docker-entrypoint.sh
中,这会中止整个启动脚本:
set -eou pipefail
答案 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 个服务。
我分两步解决了这个问题。
#- KEYCLOAK_USER=admin
#- KEYCLOAK_PASSWORD=admin
docker-compose up keycloak
keycloak 是一个 ServiceName
答案 7 :(得分:0)
根据我的发现,设置此默认用户的最佳方法是不是通过环境变量添加它,而是通过以下命令:
docker exec <CONTAINER> /opt/jboss/keycloak/bin/add-user-keycloak.sh -u <USERNAME> -p <PASSWORD>
答案 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