通过 Jenkins 上的嵌套 docker 容器进行端口转发

杰克·瓦格纳

我的 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

这是通过简单地传入我使用的随机端口和 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 主机转发到我的测试环境到我的测试容器?

杰克·瓦格纳

使用该选项运行测试环境--network host似乎为我解决了问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Mesos / Marathon上通过端口映射部署Docker容器

通过从属服务器上的Jenkins Shell清洁Docker容器

在Docker容器中使用iptables进行端口转发

使docker容器通过端口通信

Docker容器之间的端口转发

通过jenkins管道删除具有图像名称的docker容器

在jenkins奴隶上的容器内访问docker

在Docker容器上运行Jenkins。无法通过unix:///var/run/docker.sock连接到Docker守护程序。泊坞窗守护程序正在运行吗?

通过 ip 与端口公开访问 docker 容器

将主机端口转发到Docker容器

Docker Swarm 覆盖网络上的端口转发

在构建Docker容器时,Jenkins在Kubernetes上的问题

通过VPN容器连接的Docker容器的开放端口

在Docker容器的其他端口上运行Jenkins

通过共享wifi进行端口转发

通过Jenkins CI在Docker容器中运行Selenium测试的最简单方法

通过Docker安装的Jenkins无法在AWS EC2上运行

如何通过 jenkins 和 SSH 在远程机器上运行 docker 命令?

在docker-machine中进行端口转发?

无法通过端口映射从外部主机访问 docker 容器

我可以通过暴露的端口停止Docker容器吗?

通过 Tor 隐藏服务访问 Docker 容器的 HTTP 端口

在Docker容器中启动Jenkins

Docker容器作为Jenkins从站

在活动的Docker容器上公开端口

通过Azure子域上的https访问Docker容器

通过bash脚本在Postgres docker容器上执行查询

无法通过pgAdmin连接到Docker容器上的Postgres

通过SSH连接到CentOS 7上的jhipster docker容器