testcontainers oracleContainer在Dokerfile中定义的entrypoint发生更改之前启动,以完成并创建测试所需的用户。
容器运行后,将执行一些sql脚本创建表并用数据填充表。这些脚本失败,因为脚本中提到的用户尚未创建。
testcontainers没有等待完成安装。
OracleContainer oracleContainer = new OracleContainer("webdizz/oracle-xe-11g-sa:latest")
.withStartupTimeoutSeconds(10000)
.withEnv("DATABASES", "xyz");
oracleContainer.setWaitStrategy(new LogMessageWaitStrategy().withRegEx("*.Enjoy!*"));
通过使用以下命令检查日志:
Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(LOGGER);
oracleContainer.followOutput(logConsumer);
我可以看到testcontainers从不等待它完成。
关于这个“bug”或“问题”,我在网上找到的只是GitHub上的这个BugReport:https://github.com/testcontainers/testcontainers-java/issues/1292
我通过创建一个脚本(实际上是两个,但可以放在一个中)来解决这个问题,该脚本检查数据库用户“xyz”是否存在,如果存在则返回0。
wait_check.sh:
#!/usr/bin/env bash
while :
do
echo "waiting for user to exist"
if $(/bin/bash /check_db_user.sh | grep -q XYZ); then
echo "user XYZ exists"
exit 0
fi
done
和check_db_user.sh:
#!/usr/bin/env bash
sqlplus -s /nolog <<EOF
connect username/password
select username from dba_users where username = 'XYZ';
quit
EOF
oracleContainer.copyFileToContainer(
MountableFile.forClasspathResource("/helper/wait_check.sh"),
"/wait_check.sh");
oracleContainer.copyFileToContainer(
MountableFile.forClasspathResource("/helper/check_db_user.sh"),
"/check_db_user.sh");
try {
Container.ExecResult result = oracleContainer.execInContainer("./wait_check.sh");
log.debug(result.getStdout());
} catch (IOException | InterruptedException e) {
log.error(e.getMessage());
}
问题内容: 我正在使用Docker,并且拥有PHP,MySQL,Apache和Redis的堆栈。我现在需要添加MongoDB,因此我正在检查Dockerfile中的最新版本以及MongoDB Dockerhub中 的docker- entrypoint.sh 文件,但是我找不到设置默认数据库,管理员用户/密码以及可能进行身份验证的方法文件中容器的方法。 在MySQL中,您可以设置一些ENV变量,例
MySQL 是一个使用广泛的数据库服务器,你肯定会在某些节点上安装配置 MySQL 服务器。 本节将向你展示如何安装配置 MySQL 服务器,以及如何为应用程序自动创建数据库和用户。 准备工作 如果你还没有 MySQL 模块,先创建一个: # mkdir /etc/puppet/modules/mysql # mkdir /etc/puppet/modules/manifests # mkdir
安装oracle 19C后,它要求用户名和密码。输入什么,以及如何创建一个具有所有权限和身份验证权限的新用户。(注意,我试图通过登录SYSDBA创建用户命令,但它显示错误为无效的普通用户或角色名.在这里输入图像描述 [在此处输入图像描述][2]
主要内容:创建非限制性数据库,创建限制性数据库命令用于在实例中创建数据库。所有数据库都是使用默认存储组创建的,该存储组是在创建实例时创建的。 在DB2中,所有数据库表都存储在中,后者使用各自的存储组。 创建非限制性数据库 命令用于创建非限制性数据库。 语法: 示例 假设要创建一个名称为“XYZ”的数据库 安装后,切换到用户才有权创建新数据库。根据安装的版本,可能会更改该用户名。 但DB2默认使用作为管理员用户。 查看目录,将看到一个新用户(最
主要内容:使用Fauxton创建数据库,CouchDB使用cURL工具创建数据库在CouchDB中,数据库是存储文档的最外层结构。 CouchDB提供cURL实用程序来创建数据库。 您也可以使用的CouchDB Web界面。 使用Fauxton创建数据库 在网络浏览器中打开以下链接: 应该会看到类似下面的一个页面: 点击红色圆圈中的“Create Database”选项卡,创建一个名为“”的数据库。 它将显示一条消息,表示数据库已成功创建。可以在概览(Overview)选项卡
在这节中,我们来学习如何在MariaDB中创建一个数据库。 创建一个名称为的数据库。 语法: 示例 或者指定使用默认的字符集来创建数据库: 注意,数据库名称不区分大小写。因此:,以及均表示同一个数据库。 显示数据库 命令用于查看创建的数据库。 语法: 使用MariaDB客户端,执行上面查询语句,得到以下结果 -