我使用docker启动oracle容器。容器启动正常并且DB出现,当我尝试运行maven命令加载某些sql文件时,我收到以下错误:
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:dropAll (default-cli) on project edacm-se: Error setting up or running Liquibase: liquibase.exception.DatabaseException: java.sql.SQLException: Listener refused the connection with the following error:
[ERROR] ORA-12528, TNS:listener: all appropriate instances are blocking new connections
如果我有2个maven命令,一个先丢弃所有命令然后再一个更新,第一个将失败,上面的消息,第二个将通过,所以它显然是一个等待的问题直到oracle实例可用。
接下来的问题是,您如何确定oracle docker容器实例中的TNS监听器是否可用于远程请求?这可以在shell脚本中完成吗?
我的oracle实例正在运行:
f543a59dad62 oracle "/bin/sh -c '/usr/sbi" 22 minutes ago Up 22 minutes 8080/tcp, 0.0.0.0:49160->22/tcp, 0.0.0.0:49161->1521/tcp determined_khorana
并且基于这张图片:
答案 0 :(得分:0)
您可能需要在docker-compose.yml
中添加depends_on
directive,以便等待数据库完全可用。
请参阅docker-oracle-xe-11g issue 20,其中涉及" Controlling startup order in Compose"