我创建了以下mariadb测试容器
@Container
private static final @NotNull MariaDBContainer<?> mariadb = getMariaDBTestContainer(network);
private static MariaDBContainer<?> getMariaDBTestContainer(Network network) {
MariaDBContainer mariadb = new MariaDBContainer<>(DockerImageName.parse("mariadb").withTag("10.5.8"))
.withDatabaseName("db")
.withUsername("user")
.withPassword("pw")
.withInitScript("database.sql")
.withNetwork(network)
.withNetworkAliases("mariadb")
.withExposedPorts(3306)
;
mariadb.start();
mariadb.setPortBindings(Collections.singletonList(mariadb.getMappedPort(3306) +":3306"));
return mariadb;
}
本人确认
mariadb.gethost()==“localhost”和mariadb.getMappedPort(3306)== 3306
然而,在加载测试容器之后,我可以通过使用mariadb容器id而不是通过localhost从同一网络中的另一个容器访问mariadb shell。这个命令给我mariadb shellmariadb --host <MARIADBCONTAINER_NAME> --port 3306 --user user --password
但这个命令mariadb --host localhost --port 3306 --user user --password
表示ERROR 2002 (HY000): Can't connect to server on 'localhost' (99)
我想知道为什么localhost不能连接到mariadbshell
1条答案
按热度按时间7d7tgy0s1#
MariaDB容器端口
3306
将被Map到主机上的随机空闲端口,也可以参见官方Testcontainers文档中关于主机和容器之间网络连接的部分。要在容器启动后访问端口,请使用以下方法:
由于您正在使用
MariaDBContainer
模块,因此不需要使用withExpostedPorts()
,它已经自动配置。此外,我不确定你想在这里实现什么,你应该删除这段代码:
关于容器之间的联网,请查看这部分文档。