docker - 无法从同一网络中的另一个测试容器连接到 neo4j 测试容器
问题描述
这里有一个在同一网络中创建 Testcontainers 的好例子:如果 Testcontainers 不存在,可以为我创建 docker 网络吗?
我的环境有点不同,不幸的是我没有得到两个容器之间的连接。
我的设置如下所示:
import org.junit.Rule;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
import org.springframework.boot.test.util.EnvironmentTestUtils;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.wait.strategy.Wait;
@ContextConfiguration(initializers = RuleCombination.Initializer.class)
public abstract class RuleCombination {
private static final Integer NEO4j_EXPOSED_PORT = 7687;
private static final Integer MYSERVICE_EXPOSED_PORT = xxxx;
private static Network network = Network.newNetwork();
private static GenericContainer neo4jContainer =
new GenericContainer("preconfigured-neo4j-container")
.withExposedPorts(NEO4j_EXPOSED_PORT)
.withNetwork(network)
.withNetworkAliases("neo4j")
.withEnv("NEO4J_dbms_security_auth__enabled", "false")
.waitingFor(Wait.forListeningPort());
static {
neo4jContainer.start();
}
private static GenericContainer myserviceContainer =
new GenericContainer("myservice-container")
.withExposedPorts(MYSERVICE_EXPOSED_PORT)
.withNetwork(network)
.withEnv("spring.data.neo4j.uri",
"bolt://" + "neo4j" + ":" +
neo4jContainer.getMappedPort(NEO4j_EXPOSED_PORT));
static {
myserviceContainer.start();
}
@Rule
public TestRule containerCombination = RuleChain.outerRule(myserviceContainer).around(neo4jContainer);
public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
EnvironmentTestUtils.addEnvironment(
configurableApplicationContext.getEnvironment(),
"feign.myservice.url: http://" + myserviceContainer.getContainerIpAddress() + ":" + myserviceContainer.getMappedPort(MYSERVICE_EXPOSED_PORT));
}
}
}
Wenn 我使用这个配置运行测试,我得到了错误
ServiceUnavailableException: Unable to connect to neo4j:32819
知道如何正确地将 neo4j 容器的 ip 传递给 myservice 容器吗?
解决方案
错误是在 myserviceContainer 中使用映射的 Neo4j 端口neo4jContainer.getMappedPort(NEO4j_EXPOSED_PORT)
而不是暴露的端口本身。
在这种情况下,也不需要带有 RuleChain 的 @Rule。
推荐阅读
- python - 沿特定维度洗牌张量
- python - Python中的连续图像遮罩
- spring-boot - KeyCloak Spring Boot - 在验证成功时添加自定义代码
- oracle - Oracle DBMS_Scheduler 每天上午 9:10 和 11:30 运行 DBMS_JOB
- jquery - 向每个 javascript 页面添加代码的快捷方式(使用可变 jquery 选择器)
- php - PHP PDO MYSQL/MARIADB 如何查询视图?(查看未找到错误)
- wordpress - 上传时用连字符替换图像文件名的空格
- c# - 单选按钮和文本之间的空间
- html - HTML 复选框输入是否有可用的模式?
- javascript - django - ajax - 从 jquery/ajax 调用 python 函数