Ruby 通过Jenkins上嵌套的docker容器进行港口转运

Ruby 通过Jenkins上嵌套的docker容器进行港口转运,ruby,docker,jenkins,portforwarding,Ruby,Docker,Jenkins,Portforwarding,My Jenkins pipeline使用docker插件,然后从该插件内部运行docker容器,以设置如下一般测试环境: node('docker') { sh """ cat > .Dockerfile.build <<EOF FROM ruby:$rubyVersion RUN apt-get update && apt-get install -y locales && loc

My Jenkins pipeline使用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()
    }
这是通过简单地传入我使用的随机端口和Jenkins docker节点IP来调用的。运行测试容器时,我会执行以下操作:

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

然而,我的测试结果仍然是零,而不是OK。有没有一种方法可以从Jenkins主机到我的测试环境再到我的测试容器?

运行带有选项
--网络主机
的测试环境似乎为我解决了这个问题。

在最内部的环境中,您是连接到
本地主机
还是连接到
环境['DOCKER\u host\u IP']
?你得到的实际错误是什么?本质上没有“嵌套容器”,所有这些调用都指向主机的Docker守护进程,
-p
选项在最外层主机上发布端口。@DavidMaze我正在连接到
ENV['Docker\u host\u IP']
host='localhost'
部分只是默认值,如果没有提供。我得到的错误是SystemCallError,我只需返回
nil
。通过使用
-p
,我可以直接从jenkins主机节点与测试容器对话(跳过环境/中间容器)?让应用程序测试其主机的防火墙设置似乎有点倒退。应用程序不应该在意。我不是说要重新设计您的解决方案,但乍一看,这似乎是一个很差的问题分离。@Anotherh主机正在测试应用程序的防火墙。通过使用主机的IP和端口打开TCP套接字,我在该端口上与主机建立了TCP连接。然后我尝试阅读,如果我不能阅读,那么应用程序防火墙将阻止它,并抛出并捕获
SystemCallError
。为什么应用程序知道或关心防火墙?再一次,似乎是一个糟糕的分离,但也许整体设置只是我不清楚。我知道我不会在这里回答你的问题,所以我不会一直把评论弄得乱七八糟。祝你好运
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