如何使用未部署在swarm中的docker容器从docker swarm访问服务?

时间:2017-10-27 11:50:29

标签: docker jenkins jenkins-pipeline docker-swarm

我在Docker swarm中部署了Jenkins和Nexus。 Jenkins有一个配置为通过套接字访问主机docker的docker。

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

此设置允许在docker swarm上部署的jenkins内使用docker,并且工作正常。

当我尝试使用docker容器构建jenkins管道并随后尝试访问nexus存储库时,我遇到了问题。基本上使用jenkins的swarm部署在覆盖网络中,该网络无法从jenkins管道使用的容器访问。

Docker网络如下所示:

docker network ls:
...
wzr8yyx6hki1        ci-cd-network   overlay             swarm
..

示例jenkins管道演示过程:

pipeline {

  agent none
  triggers { pollSCM('H/15 * * * *') }
  environment {
    NODE_IMAGE = 'node:6'
  }
  stages {
    stage('Checkout') {
        agent any
          steps {
            /*generated with jenkins syntax generator*/
              checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@bitbucket.org:code/project.git']]])
                }
        }
    stage('Static code check (run lint)') {
            agent {
              docker { image '${NODE_IMAGE}' }
            }
            steps {
                sh 'npm install'
                sh 'npm run lint:ts'
      }
    }
    stage('Unit Test') {
            agent {
              docker { image '${NODE_IMAGE}' }
            }
            steps {
                sh 'npm install'
                sh 'npm publish'

            }
    }
  }
}

由jenkins管道进程创建的容器无法访问由swarm使用并包含nexus和jenkins机器的网络'ci-cd-network'内的nexus服务。基本上nexus服务可以从docker swarm中部署的另一个docker服务访问('ping nexus')但是不能从我的'node'容器访问,它只是作为容器单独运行(不在swarm中)?知道如何让nexus服务“可见”到“节点”容器吗?

1 个答案:

答案 0 :(得分:0)

您可以将创建的代理容器附加到jenkins中,然后将容器相互通信。

agent {
    docker {
        image '${NODE_IMAGE}'
        args  '--network ci-cd-network'
    }
}