You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署Keycloak启动失败:文件或目录不存在

问题:Keycloak容器启动失败,提示找不到kc.sh文件

启动docker-compose.yaml时,Postgres可正常启动,但Keycloak启动失败,报错信息如下:

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/opt/keycloak/bin/kc.sh ": stat /opt/keycloak/bin/kc.sh : no such file or directory: unknown

启用交互式终端、将ENTRYPOINT改为bash后手动执行/opt/keycloak/bin/kc.sh start-dev,Keycloak可正常启动;尝试将Dockerfile中的ENTRYPOINT设为/opt/keycloak/bin/kc.sh start-dev并移除compose.yaml中的command,问题依旧。


问题根源

你的Keycloak Dockerfile中,ENTRYPOINT的路径末尾多了一个空格:

ENTRYPOINT ["/opt/keycloak/bin/kc.sh "]

Docker会严格按照这个带空格的路径查找文件,但实际文件路径是/opt/keycloak/bin/kc.sh(无末尾空格),因此提示文件不存在。

修复方案

修改Dockerfile中的ENTRYPOINT,去掉路径末尾的空格:

ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]

修改后,compose.yaml中的command: - start-dev会和ENTRYPOINT正常组合,执行/opt/keycloak/bin/kc.sh start-dev命令,Keycloak即可正常启动。


附:用户提供的原始配置文件

Keycloak Dockerfile

FROM quay.io/keycloak/keycloak:latest as builder

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

# Configure a database vendor
ENV KC_DB=postgres

WORKDIR /opt/keycloak
# for demonstration purposes only, please make sure to use proper certificates in production instead
RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:keycloak,IP:127.0.0.1" -keystore conf/server.keystore
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:latest
COPY --from=builder /opt/keycloak/ /opt/keycloak/

# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=jdbc:postgresql://snc-postgres:5432/keycloak
ENV KC_DB_USERNAME=localdevuser
ENV KC_DB_PASSWORD=password1
ENV KC_HOSTNAME=keycloak
ENTRYPOINT ["/opt/keycloak/bin/kc.sh "]

compose.yaml

name: snc-infrastructure
services:
  snc-postgres:
    image: me/postgres
    secrets:
      - db-password
    build:
      context: ./postgres
      dockerfile: Dockerfile
      tags:
        - "me/postgres:latest"
    healthcheck:
      test: [ "CMD", "pg_isready", "-q", "-U", "localdevuser", "-d", "keycloak" ]
      interval: 10s
    volumes:
      - type: volume
        source: postgres-snc
        target: /var/lib/postgresql/data
    networks:
      - snc-network
    environment:
      - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
    container_name: snc-postgres
    ports:
      - target: 5432
        published: 5432
        protocol: tcp
        mode: host

  snc-keycloak:
    image: me/keycloak:latest
    build:
      context: ./keycloak
      dockerfile: Dockerfile
      tags:
        - "me/keycloak:latest"
    #    stdin_open: true # docker run -i
    #    tty: true        # docker run -t
    depends_on:
      snc-postgres:
        condition: service_healthy
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    command:
      - start-dev
    ports:
      - "8080:8080"
      - "8001:8001"
    networks:
      - snc-network

volumes:
  postgres-snc:
    name: postgres-snc

secrets:
  db-password:
    file: ./postgres/password.txt

networks:
  snc-network:

内容的提问来源于stack exchange,提问作者Timothy Vogel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:24:56