docker Dock合成卷不保存Keycloak的容器状态

mfuanj7w  于 2023-01-29  发布在  Docker
关注(0)|答案(5)|浏览(161)

docker-compose.yml

services:
  idprovider-app:
    container_name: idprovider-app
    build:
      dockerfile: Dockerfile
      context: .
    environment:
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
    volumes:
        - keycloak-data-volume:/var/lib/keycloak/data
    ports:
      - "8090:8090"   
      - "8443:8443"     
volumes:
  keycloak-data-volume:
    external: true

固定文件

FROM jboss/keycloak:7.0.1
EXPOSE 8080
EXPOSE 8443

** Docker 检查“集装箱”**

"Mounts": [
            {
                "Type": "volume",
                "Name": "keycloak-data-volume",
                "Source": "/mnt/sda1/var/lib/docker/volumes/keycloak-data-volume/_data",
                "Destination": "/var/lib/keycloak/data",
                "Driver": "local",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            }
        ],

Docker卷检查密钥隐藏数据卷

[
    {
        "CreatedAt": "2019-12-10T19:31:55Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/keycloak-data-volume/_data",
        "Name": "keycloak-data-volume",
        "Options": {},
        "Scope": "local"
    }
]

没有错误,但它不保存状态。我不知道出了什么问题。我在Windows 10上运行它。

xzlaal3s

xzlaal3s1#

使用默认的数据库位置,您可以尝试此选项与docker-compose:

keycloak:
    image: quay.io/keycloak/keycloak:14.0.0
    container_name: keycloak
    environment:
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
    ports:
      - "8082:8080"
    restart: always
    volumes:
      - .local/keycloak/:/opt/jboss/keycloak/standalone/data/

在普通Docker https://stackoverflow.com/a/60554189/6916890中找到类似答案
docker run --volume /root/keycloak/data/:/opt/jboss/keycloak/standalone/data/

gtlvzcf8

gtlvzcf82#

如果你使用的是https://www.keycloak.org/getting-started/getting-started-docker中提到的docker设置,并且正在寻找一种即使容器被删除也能持久保存数据的方法,那么你可以使用docker卷,并将/opt/keycloak/data/文件夹从docker容器挂载到本地机器的一个目录中。
在入门文档中提到的docker命令中,您需要做的唯一更改是使用添加卷装载docker选项
-v /<path-in-your-local-machine>/keycloak-data/:/opt/keycloak/data/
因此,以本地目录为例的最终docker run命令如下所示:

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin \ 
-v /Users/amit/workspace/keycloak/keycloak-data/:/opt/keycloak/data/ \
quay.io/keycloak/keycloak:19.0.3 start-dev
qcuzuvrc

qcuzuvrc3#

您使用的是哪个数据库?我认为您需要将数据库卷也与它绑定以保存状态。
例如:对于postgress

services:
  postgres:
      image: postgres
      volumes:
        - postgres_data:/var/lib/postgresql/data
      environment:
        POSTGRES_DB: keycloak
        POSTGRES_USER: keycloak
        POSTGRES_PASSWORD: password

或用于MySQL

services:
  mysql:
      image: mysql:5.7
      volumes:
        - mysql_data:/var/lib/mysql
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: keycloak
        MYSQL_USER: keycloak
        MYSQL_PASSWORD: password
vqlkdk9b

vqlkdk9b4#

您必须在环境变量中指定数据库的源。如果您为postgres的PostgreSQL示例使用了其他服务,则必须在服务中指定DB_ADDR环境变量。

services:
  idprovider-app:
    container_name: idprovider-app
    build:
      dockerfile: Dockerfile
      context: .
    environment:
      DB_VENDOR: POSTGRES
      # Specify hostname of the database (eg: hostname or hostname:port)
      DB_ADDR: hostname:5432 
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_SCHEMA: public
      DB_PASSWORD: password
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
    volumes:
        - keycloak-data-volume:/var/lib/keycloak/data
    ports:
      - "8090:8090"   
      - "8443:8443"     
volumes:
  keycloak-data-volume:
    external: true
laximzn5

laximzn55#

我的两分钱,为我工作的持久卷指向/opt/keycloak/data/h2,与Keycloak docker版本19. 0. 1:

-v /<path-in-your-local-machine>/keycloak-data/:/opt/keycloak/data/h2

相关问题