Невозможно подключиться к тестконтейнеру neo4j из другого тестконтейнера в той же сети - PullRequest
0 голосов
/ 17 мая 2018

Вот хороший пример создания 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 Ответ

0 голосов
/ 17 мая 2018

Ошибка заключалась в использовании сопоставленного порта Neo4j neo4jContainer.getMappedPort(NEO4j_EXPOSED_PORT) в myserviceContainer вместо самого открытого порта.

Также в этом случае @Rule с RuleChain не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...