代码之家  ›  专栏  ›  技术社区  ›  David Le Moing

无法访问Jenkins管道创建的容器

  •  1
  • David Le Moing  · 技术社区  · 8 年前

    我目前正在Jenkins尝试一个简单的脚本管道。我的项目有一些需要运行S3服务器的测试。这就是为什么我使用Minio。

    这是 Jenkinsfile 我做了:

    node {
        docker.image('minio/minio').withRun('-p 9000:9000 -e "MINIO_ACCESS_KEY=mykey" -e "MINIO_SECRET_KEY=mysecret"', 'server /data') { c ->
            docker.image('maven:3.5.2-jdk-8-alpine').inside() {
                sh 'mvn clean package'
            }
        }
    }
    

    Minio服务器似乎已启动,但在测试中,我尝试访问localhost:9000,出现以下异常:

    com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to localhost:9000 [localhost/127.0.0.1] failed: Connection refused (Connection refused)
    

    当使用Docker在本地启动Minio并运行本地Maven时,我没有任何问题。

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   mkobit    7 年前

    你的 minio/minio 容器将其容器端口9000映射到主机端口9000。你的 maven:3.5.2-jdk-8-alpine 容器也已启动,但它对 minio 容器本身或主机。所以,运行类似 curl localhost:9000 的内部 maven:3.5.2-jdk-8-alpine 不会得到响应。

    当您在笔记本电脑上运行时,我猜您正在运行 迷你们 带有 -p 9000:9000 选择但是 您正在跑步 mvn clean package 从笔记本电脑 . 端口映射到笔记本电脑的 9000 ,并运行类似 curl本地主机:9000 从你的笔记本电脑会得到回应。

    你需要做的是 迷你/迷你 可访问的容器 maven:3.5.2-jdk-8-alpine 容器有几种不同的方法 container networking . 一种方法是使用 a user defined bridge network :

    node {
      sh 'docker network create --driver bridge minio-net'
      docker.image('minio/minio').withRun('--network-alias minio --net minio-net -e "MINIO_ACCESS_KEY=mykey" -e "MINIO_SECRET_KEY=mysecret"', 'server /data') { c ->
        docker.image('maven:3.5.2-jdk-8-alpine').inside('--net minio-net') {
          sh 'nc -zv minio 9000'
          sh 'mvn clean package'
        }
      }
      sh 'docker network rm minio-net'
    }
    

    在此示例中:

    • 使用名称创建本地网桥网络 minio-net
    • 这个 迷你/迷你 容器已连接到 迷你网络 网络作用域别名为的容器 迷你们
    • nc 用于检查与的连接 minio:9000 在构建步骤之前

    您可能希望注入一个环境变量或其他内容来引用minio服务的位置,这可能是 localhost 在笔记本电脑上,但在其他地方,具体取决于它的执行方式。

    注: 为了简洁起见,我对网络名称进行了硬编码,并假设没有故障

    推荐文章