Переадресация портов через вложенные docker контейнеры на Jenkins - PullRequest
1 голос
/ 01 мая 2020

Мой конвейер Jenkins использует плагин docker, который затем запускает контейнер docker изнутри этого для настройки общей тестовой среды, например:

   node('docker') {
    sh """
        cat > .Dockerfile.build <<EOF
        FROM ruby:$rubyVersion
        RUN apt-get update && apt-get install -y locales && localedef -i en_US -f UTF-8 en_US.UTF-8
        ENV LANG=en_US.UTF-8 \\
            LANGUAGE=en_US:en \\
            LC_LANG=en_US.UTF-8 \\
            LC_ALL=en_US.UTF-8

        RUN \\                  
          curl -sSL -o /tmp/docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-${dockerVersion}.tgz && \\
          tar --strip-components 1 --directory /usr/local/bin/ --extract --file /tmp/docker.tgz

        RUN \\
          groupadd -g $gid  docker && \\
          useradd -d $env.HOME -u $uid build -r -m && \\
          usermod -a -G docker build
        EOF

    """.stripIndent().trim()
    }

Как только контейнер тестовой среды запущен Я запускаю другой контейнер с моим кодом и тестами внутри ранее созданного контейнера среды. Один из моих тестов включает проверку того, что через iptables был настроен межсетевой экран, который пропускает определенные порты. Чтобы проверить, правильно ли настроен мой брандмауэр, я просто запускаю его из этого контейнера (теперь 3 docker контейнеров в глубину):

  def listener_response(port, host = 'localhost')
    TCPSocket.open(host, port) do |socket|
      socket.read(2)
    end
  rescue SystemCallError
    nil
  end

Это вызывается простым передачей случайного порта, который я использовал и IP-узел Jenkins docker. Когда я запускаю свой тестовый контейнер, я делаю что-то вроде:

docker run -d -e DOCKER_HOST_IP=10.x.x.x -e RANDOM_OPEN_PORT=52459 -p 52459:52459 -v /var/run/docker.sock:/var/run/docker.sock

Однако я все равно получаю нулевой ответ от моего теста, а не ОК. Есть ли способ перенести данные с хоста Jenkins в мою тестовую среду на мой тестовый контейнер?

1 Ответ

1 голос
/ 01 мая 2020

Запуск тестовой среды с опцией --network host, похоже, решил проблему для меня.

...