簡體   English   中英

使用“Docker 外部的 Docker”設置時,無法連接到 Jenkins 管道中的 docker 容器

[英]Unable to connect to docker container in Jenkins pipeline when using “Docker outside of Docker” setup

我正在基於這樣的代理運行 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 請求,這是應該從這里提供 Web 應用程序的地方。 但我明白了

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 測試

在 Jenkins docker docker 設置中,從技術上講,Z2E54334C0A5CE2E3E3E5A5845DF3AB3 與其他容器“共享”相同的空間。 這意味着,它可以與它“創建”的容器進行通信。

就我而言,我所做的是在我的 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 具有外部節點的設置上對此進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM