Невозможно подключиться к тестконтейнеру neo4j из другого тестконтейнера в той же сети
Вот хороший пример создания Testcontainers в одной сети: могут ли Testcontainers создать для меня сеть докеров, если она не существует?
Мое окружение немного отличается, и, к сожалению, я не вижу связи между обоими контейнерами.
Вот как выглядит моя установка:
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));
}
}
}
Когда я запускаю тест, используя эту конфигурацию, я получаю ошибку
ServiceUnavailableException: Unable to connect to neo4j:32819
Есть идеи, как правильно передать ip контейнера neo4j в контейнер myservice?
1 ответ
Ошибка заключалась в использовании подключенного порта Neo4j neo4jContainer.getMappedPort(NEO4j_EXPOSED_PORT)
в myserviceContainer вместо самого открытого порта.
Также @Rule с RuleChain в этом случае не требуется.