首页 > 解决方案 > 如何重启 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 );
    }

如何杀死并重新启动容器?我想指出,我不想用相同的端口映射启动其他容器。我想用相同的端口映射启动同一个容器。

标签: testcontainers

解决方案


推荐阅读