如何检查 Oracle 是否在 Docker 中启动?

Dmi*_*ich 12 oracle docker dockerfile docker-compose

正如标题所说:如何检查 Oracle 是否在 Docker 中启动?现在我的应用程序尝试创建一个 Hibernate 会话,我得到了

ERROR :
ORA-01033: ORACLE initialization or shutdown in progress
Run Code Online (Sandbox Code Playgroud)

所以我想要某种只有 url 的健康检查。那可能吗?谢谢你!

Kir*_*ill 8

使用docker-compose.yml官方Oracle docker 镜像,您可以使用checkDBStatus.sh脚本作为运行状况检查。当 db 处于 ORA-01033 状态时,脚本返回非 0。下面是一个例子。healthcheck注意 db 的服务和 tomcat 的depends_on条件的组合service_healthy

  tomcat:
    image: "tomcat:9.0"
    depends_on:
      oracle-db:
        condition: service_healthy
    links:
      - oracle-db
services:
  oracle-db:
    build:
      context: src/main/docker/oracle_db
      dockerfile: Dockerfile.xe
    mem_reservation: 2g
    environment:
      - ORACLE_PWD=oracle
    volumes:
      - oracle-data:/opt/oracle/oradata
    healthcheck:
      test: [ "CMD", "/opt/oracle/checkDBStatus.sh"]
      interval: 2s

volumes:
  oracle-data:
Run Code Online (Sandbox Code Playgroud)

  • @anonymous这不是我的,它是[来自Oracle](https://github.com/oracle/docker-images/blob/5eda713f7bb0d26a3dca02d9d70f5e7db3e92204/OracleDatabase/SingleInstance/dockerfiles/21.3.0/checkDBStatus.sh) (2认同)

wut*_*aer 5

我正在使用 wnameless/oracle-xe-11g-r2 这对我有用

version: '3'
services:
   db:
      image: wnameless/oracle-xe-11g-r2
      environment:
      - ORACLE_ALLOW_REMOTE=true
      ports:
      - 49261:1521
      volumes:
      - ./0_init.sql:/docker-entrypoint-initdb.d/0_init.sql
      healthcheck:
         test: [ "CMD", "bash", "-c", "echo 'select 1 from dual;' | ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe /u01/app/oracle/product/11.2.0/xe/bin/sqlplus -s USERNAME/PASSWORD@localhost"]
         # docker inspect --format "{{json .State.Health }}"  myproject_db_1
         interval: 10s
         timeout: 10s
         retries: 60
   myservice:
      image: xxx
      depends_on:
         db:
            condition: service_healthy
Run Code Online (Sandbox Code Playgroud)