docker - 如何使用Curl从Jenkins通过Docker网桥将文件发布到Go服务器?

标签 docker go jenkins curl docker-compose

作为Jenkins自由式项目的一部分,我试图执行以下 Post Step shell命令:

curl -X POST -i -F "SimpleTest=@target/surefire-reports/TEST-junitfaq.SimpleTest.xml" 127.0.0.1:9090/ 

该请求针对以下简单的Go服务器:
package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "log"
    "net/http"
)

func main() {
    router := mux.NewRouter()
    router.
        Path("/").
        Methods("POST").
        HandlerFunc(UploadFile)

    fmt.Println("Starting...")

    log.Fatal(http.ListenAndServe(":9090", router))
}

func UploadFile(w http.ResponseWriter, r *http.Request) {
    (w).Header().Set("Access-Control-Allow-Origin", "*")

    err := r.ParseForm()
    if err != nil {
        w.Write([]byte(err.Error()))
        return
    }

    file, _, err := r.FormFile("SimpleTest")
    defer file.Close()
    if err != nil {
        w.Write([]byte(err.Error()))
        return
    }

    bytes := make([]byte, 100)
    n, err := file.Read(bytes)
    if err != nil {
        w.Write([]byte(err.Error()))
        return
    }

    fmt.Printf("%d bytes: %s\n", n, string(bytes[:n]))
}


JenkinsGo服务器都在使用以下Docker文件创建的Docker-compose容器中运行:
version: '3'

services:

  foobar:
    container_name: foobar
    image: foobar:latest
    hostname: foobar
    build:
      context: .
      dockerfile: Dockerfile
    networks:
      - foobar-net
    ports:
      - 9090:9090
    labels:
      kompose.service.type: LoadBalancer

  jenkins:
    container_name: jenkins
    image: jenkinsci/blueocean
    restart: always
    hostname: foobar
    ports:
      - 7070:8080
    networks:
      - foobar-net
    depends_on:
      - foobar
    links:
      - foobar
    volumes:
      - $PWD/data/jenkins:/var/jenkins_home

networks:
  foobar-net:
    driver: bridge

当我执行此作业时,Curl命令失败,并返回以下结果:
curl -X POST -i -F 'SimpleTest=@target/surefire-reports/TEST-junitfaq.SimpleTest.xml' 127.0.0.1:9090/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to 127.0.0.1 port 9090: Connection refused
Build step 'Execute shell' marked build as failure

是什么原因导致我的连接被拒绝?

最佳答案

在Jenkins容器中,curl to 127.0.0.1:9090将尝试连接到同一容器中的服务,但是看起来您正在另一个容器中运行此服务。您可能会想要 curl 到foobar:9090

关于docker - 如何使用Curl从Jenkins通过Docker网桥将文件发布到Go服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60268352/

相关文章:

docker - 链接在两个不同的 docker-compose 文件中配置的容器

c# - 无法添加 Docker 支持 Visual Studio 2017

mongodb - 查找时间戳小于 10 秒的所有 mongo db 文档

linux - Jenkins docker 缺少一些二进制文件

azure - Azure WebApp 和 SQLAzure 上的 Sonarqube 容器

python - 调试立即退出的 Docker?

go - 如何在 Go 中分配一片 float ?

带证书的 Golang Opc UA 客户端实现

jenkins - 可以测试作业 DSL 脚本吗

Jenkins Pipeline 构建步骤 - getBuildVariables() 返回空映射