gpt4 book ai didi

docker - 无法从同一网络中的另一个testcontainer连接到neo4j testcontainer

转载 作者:行者123 更新时间:2023-12-02 19:31:55 25 4
gpt4 key购买 nike

这里有一个在同一网络中创建Testcontainer的好例子:Can Testcontainers create docker network for me if it does not exist?

我的环境略有不同,不幸的是我没有在两个容器之间建立连接。

我的设置如下所示:

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。

关于docker - 无法从同一网络中的另一个testcontainer连接到neo4j testcontainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50389344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com