testcontainers - 如何重启 testcontainers 容器?
问题描述
我有服务器和客户端应用程序。服务器在 docker 容器内启动。我想测试服务器崩溃并返回的场景。客户端在崩溃前连接到服务器,并在服务器恢复时自动连接到服务器。问题是测试容器随机映射端口,服务器在返回后监听不同的端口。
我使用org.testcontainers.containers.GenericContainer#withExposedPorts
方法来公开端口。我使用以下代码杀死并启动容器:
container.getDockerClient()
.killContainerCmd( container.getContainerId() )
.exec();
container.getDockerClient()
.startContainerCmd( container.getContainerId() )
.exec();
或者
container.stop();
container.start();
我试图设置端口绑定,但它不起作用。
setBinding(container)
container.getDockerClient()
.killContainerCmd( container.getContainerId() )
.exec();
container.getDockerClient()
.startContainerCmd( container.getContainerId() )
.exec();
...
private void setBinding( GenericContainer aContainer )
{
List< Integer > exposedPorts = aContainer.getExposedPorts();
List< String > bindings = new ArrayList<>();
exposedPorts.forEach( e -> bindings.add( aContainer.getMappedPort( e ) + ":" + e ) );
aContainer.setPortBindings( bindings );
}
如何杀死并重新启动容器?我想指出,我不想用相同的端口映射启动其他容器。我想用相同的端口映射启动同一个容器。
解决方案
推荐阅读
- java - 在 reduce 操作中使用 StringBuilder(...) 作为标识值会产生不可预测的结果
- javascript - 如何使用javascript从字符串生成关键字
- php - LastModified http 标头上的 500 内部服务器错误(无效字符)
- android - Xposed 模块“提前三步”在 Android 7.0 上崩溃
- python - 循环多维numpy数组
- jquery - 单击行时如何在模式中显示行数据
- elasticsearch - 在 Kubernetes 中部署 elk 堆栈并出现 helm VolumeBinding 错误
- angular - 没有页眉/页脚的静态 HTML 页面
- sql - SQL 值从一张表到多列
- android - 发布错误后的 Play 商店