oracle - oracle docker容器启动后如何执行sql脚本?
问题描述
我已经用 spring boot + oracle DB 设置了 docker 容器。
我需要在 oracle 容器启动时运行一个 sql 脚本。
我尝试了以下方法,但容器卡在 docker-entrypoint shell 脚本中等待数据库启动。
码头工人-compose.yml
version: "3.4"
services:
oracle:
build:
context: .
dockerfile: ./docker/oracle/Dockerfile
container_name: cc_admin_portal_oracleDB
volumes:
- oracle-data:/var/lib/oracle/data
- ./docker/oracle/docker-entrypoint.sh:/docker-entrypoint-initdb.d/docker-entrypoint.sh
- ./docker/oracle/oracle-scripts.sql:/docker-entrypoint-initdb.d/oracle-scripts.sql
entrypoint: ["/docker-entrypoint-initdb.d/docker-entrypoint.sh"]
expose:
- 1522
ports:
- 1522:1521
environment:
- ORACLE_SID=ORCLCDB
- SYS_PASSWORD=Oradoc_db1
- PDB_NAME=abcd
- PDB_PASSWORD=abcd1234
restart: unless-stopped
networks:
- inbound-network
# APP*****************************************
cc_admin_portal:
image: cc_admin_portal:latest
build:
context: .
dockerfile: ./docker/cc_admin_portal/Dockerfile
container_name: cc_admin_portal
environment:
SPRING_DATASOURCE_TYPE : com.zaxxer.hikari.HikariDataSource
SPRING_DATASOURCE_URL: jdbc:oracle:thin:@oracle:1521:ORCLCDB
SPRING_DATASOURCE_USERNAME: abcd
SPRING_DATASOURCE_PASSWORD: abcd1234
expose:
- 8080
ports:
- 8080:8080
restart: unless-stopped
entrypoint: ["/usr/local/wait-for-it.sh","oracle:1521","--timeout=0","--strict", "--", "catalina.sh","run"]
depends_on:
- oracle
links:
- oracle
networks:
- inbound-network
volumes:
oracle-data:
networks:
inbound-network:
name: inbound-network
码头入口点.sh
#!/bin/sh
until echo "exit" | sqlplus -L sys/Oradoc_db1 as sysdba < /dev/null | grep 'Connected to'; do
echo "Waiting for database to start.Trying again in 5 seconds..."
sleep 5
done
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sql) echo "[IMPORT] $0: running $f"; echo "exit" | sqlplus -S / as sysdba @$f; echo ;;
*) echo "[IMPORT] $0: ignoring $f" ;;
esac
echo
done
./docker/oracle/Dockerfile
FROM store/oracle/database-enterprise:12.2.0.1-slim
RUN rm -rf /docker-entrypoint-initdb.d/*
ENV PATH="${ORACLE_HOME}/bin:${PATH}"
ENV LD_LIBRARY_PATH="${ORACLE_HOME}"
在 oracle 容器启动并运行后,我还有其他方法可以实现 sql 脚本执行吗?
解决方案
从我所看到的我怀疑你只需要添加
@path_to_sql_script
到你的./docker/oracle/oracle-scripts.sql
.
但我建议使用官方Oracle 图像。在这种情况下,您可以将带有 sql 脚本的目录挂载到 as 中/opt/oracle/scripts/startup
,并将配置脚本挂载为/opt/oracle/scripts/setup
.
推荐阅读
- javascript - 在 CSS 网格布局中添加 Html Canvas
- java - Axon Framework 不为 bean 工厂方法提供 InjectionPoint
- flutter - Flutter 中的 ScrollView 动画
- .net - 正则表达式从完整地址中提取街道,但省略了可选的方向组件
- swift - 视图/应用程序关闭后如何保持计时器运行?
- angular - Angular 8 单元测试,无法将属性“valueAccessor”设置为 null
- python - 无法导入 BeautifulSoup(pylint 导入错误)
- reactjs - react-native-testing-library 工作异步测试,但测试未包含在行为警告中
- javascript - 'typeof Subscription':原型,空
- python - 索引[201] = [0,8] 出现故障。许多稀疏操作需要排序索引。使用 `tf.sparse.reorder` 创建正确排序的副本