Могут ли тестовые контейнеры присоединиться к существующей сети?

#java #testcontainers

#java #тестовые контейнеры

Вопрос:

Я хочу создать сеть через docker-compose (через DockerComposeContainer) и подключить другой контейнер (созданный с помощью ImageFromDockerfile) к той же сети. Возможно ли это?

Вопрос в другом: может ли ImageFromDockerfile присоединиться к существующей сети? (Для меня порядок имеет решающее значение, потому что, когда я запускаю свой образ, он должен подключаться ко всем службам, работающим через compose)

Движущиеся части, которые я пробовал, включают:

  1. Файл docker compose
 version: '3.6'

services:
  vault:
    image: docker.x.com/x/vault:123-ytr
    ports:
      - 8200:8200
    networks:
      - gateway
    environment:
      - APP_NAME=requestlogidentityconsumer

networks:
  gateway:
    name: damo
  
  1. Выполнение вышеуказанного файла compose через DockerComposeContainer (вкл. создайте сеть damo)

  2. Попытайтесь создать и запустить rlic-контейнер и присоединить его к damo n / w

     Network network =
        Network.builder().createNetworkCmdModifier(cmd -> cmd.withName("damo")).build();

    new GenericContainer(
            new ImageFromDockerfile("rlic-container", true)
                .withFileFromFile("Dockerfile", DOCKER_FILE_PATH.toFile()))
        .withNetwork(network)
        .start();
  

Когда я запускаю шаг 3, я получаю:

Caused by: com.github.dockerjava.api.exception.ConflictException: {"message":"network with name damo already exists"}

Что имеет смысл (поскольку сеть существует с шага 2) и связано с моим вопросом; могу ли я написать шаг 3 таким образом, чтобы он присоединялся к существующей сети?

Спасибо

Комментарии:

1. в качестве обходного пути я могу создать одноразовый тестовый контейнер и заставить его создать сеть (damo) в качестве шага 1, а затем изменить docker-compose для присоединения к этому внешнему (damo) n / w. Это, конечно, позволяет любому дальнейшему тестовому контейнеру присоединиться к этой сети

2. Я смог обойти эту проблему, предоставив порт из docker-compose, а затем используя Testcontainers.exposeHostPorts(8200); и затем получая к нему доступ из testcontainer с http://host.testcontainers.internal:8200 подробностями об этом подходе здесь: testcontainers.org/features/networking

3. Почему на ваш новый образ нет ссылки в файле компоновки, который вы запускаете, затем сначала создаете образ, а затем запускаете файл компоновки с использованием этого образа?