【问题标题】:Unable to connect to docker container in Jenkins pipeline when using "Docker outside of Docker" setup使用“Docker 外部的 Docker”设置时无法连接到 Jenkins 管道中的 Docker 容器
【发布时间】:2020-07-22 16:44:37
【问题描述】:

我正在基于此类代理运行 Jenkins 作业:

pipeline {
  agent {
    docker {
      image 'cypress/base:10'
        args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose -u root'
    }
  }
…

注意: dockerdocker-compose 已安装到我的代理容器中,以便能够在管道阶段内运行 docker 容器(“Docker 之外的 Docker”设置)

在管道中,我开始 docker-compose 设置,它包含 2 个容器 - 服务器和 webapp

…
sh 'docker-compose up --build --detach'
…

之后,我想向localhost:8080 发送一个 GET 请求,这是应该从这里提供网络应用程序的地方。但我明白了

Error: connect ECONNREFUSED localhost:8080

相同的 docker-compose 设置适用于我的开发人员。机器。端口转发设置正确(docker-compose配置文件中开启了8080:8080端口转发)

我认为这与我在 Jenkins 中所做的“Docker 之外的 Docker”设置有点相关 ????也许端口 8080 实际上似乎正在侦听我的管道代理的主机,不确定……

我很高兴能在这个问题上获得新的想法,我完全没有想到。

只是为了提供更多上下文:我想通过 docker-compose 运行 web-app + API 服务器,然后运行 ​​Cypress(在 docker-compose 设置之外)通过 UI 进行 E2E 测试

【问题讨论】:

  • 运行 lsof -i:8080 并检查是否有其他进程正在使用该端口

标签: docker jenkins docker-compose cypress docker-in-docker


【解决方案1】:

在 docker setup 之外的 Jenkins docker 中,从技术上讲,Jenkins 也是另一个与其他容器“共享”相同空间的容器。这意味着,它可以与它“创建”的容器进行通信。

就我而言,我所做的是在我的 docker-compose.yml 文件上创建一个自定义桥接网络

version: "3.8"

services:
  app:
    build:
      context: .
    ports:
      - 8081:8080
    depends_on:
      - redisdb
    networks:
      - frontend
      - backend

  redisdb:
    image: redis
    ports:
      - 127.0.0.1:6380:6379
    networks:
      - backend

networks:
  frontend: {}
  backend: {}

创建完成后,docker-compose 会使用以下格式创建这些网络:

  • {FOLDER_NAME}_frontend(例如:pipeline_frontend)
  • {FOLDER_NAME}_backend

这些网络通常是桥接网络。

我的 Jenkins 容器最初驻留在默认网络“网桥”中。由于我的 jenkins 在桥接网络中并且这些容器在桥接类型网络中,因此我可以稍后在管道中通过运行时连接我的 jenkins。

docker network connect pipeline_frontend jenkins

现在通过 jenkins,我可以通过容器的服务名称直接与容器通信。 例如,在我的 Jenkins 中,我可以 curl 到 http://app:8080

注意:此答案仅适用于 Jenkins 容器与它创建的容器一样单独驻留在主机中的情况。我没有在 Jenkins 有外部节点的设置上对此进行测试。

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 2020-02-08
    • 2017-12-20
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2020-10-20
    • 2021-06-18
    相关资源
    最近更新 更多