Могут ли Testcontainers создать для меня сеть докеров, если она не существует?

Похоже, мне нужна сеть, потому что я хотел бы сослаться на один контейнер по имени хоста из другого.

Я также мог бы использовать --link но это устарело и может скоро исчезнуть. Вот почему мне интересно, могут ли Testcontainers создать для меня сеть докеров.

С командной строки я бы просто выполнить docker network create bridge2 и тогда я могу запустить контейнеры, как это:

docker run -it --rm --net=bridge2 --name alpine1 alpine
docker run -it --rm --net=bridge2 --name alpine2 alpine

и решить nslookup alpine2 от alpine1 контейнер.

Если я попытаюсь использовать по умолчанию --net=bridge сеть или пропустить --net Опция (которая на самом деле такая же) ссылка по имени не будет работать.

1 ответ

Решение

Да, вы можете создавать сети с помощью TestContainers. Мы собираемся документировать это в ближайшее время, но это так просто, как:

Сначала создайте сеть:

@Rule
public Network network = Network.newNetwork();

Затем настройте свои контейнеры для присоединения к нему:

@Rule
public NginxContainer nginx = new NginxContainer<>()
        .withNetwork(network) // <--- Here
        .withNetworkAliases("nginx") // <--- "hostname" of this container
        .withCustomContent(contentFolder.toString());

@Rule
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer<>()
        .withNetwork(network) // <--- And here
        .withDesiredCapabilities(DesiredCapabilities.chrome());

Теперь контейнер Nginx будет виден Chrome как " http://nginx/".

Тот же пример в наших тестах:
https://github.com/testcontainers/testcontainers-java/blob/540f5672df90aa5233dde1dde7e8a9bc021c6e88/modules/selenium/src/test/java/org/testcontainers/junit/LinkedContainerTest.java#L27

Другие вопросы по тегам