Могут ли 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