【问题标题】:Deploying Jenkins with docker in docker swarm在 docker swarm 中使用 docker 部署 Jenkins
【发布时间】:2025-10-03 03:15:02
【问题描述】:

所以我试图在我的 docker swarm 中运行 jenkins,我希望它能够执行 docker 命令来构建新的 docker 映像。

当我使用 docker-compose 脚本在本地运行它时:

version: '2'
services:
  jenkins:
    build: ./jenkins
    image: munhunger/jenkins
    container_name: "jenkins"
    ports:
      - "81:8080"
    environment:
      - minio_url=<URL>
      - minio_access=<TOKEN>
      - minio_secret=<SECRET>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.jenkins/workspace:/root/.jenkins/workspace
      - /var/lib/jenkins:/var/lib/jenkins
      - /var/lib/docker:/var/lib/docker

它完全按照我的意愿工作,它可以构建以下 jenkinsfile:

pipeline {
    agent any
    stages {
        stage('build war') {
            agent {
                docker { image 'gradle:latest' }
            }
            steps {
                sh 'gradle war -b oven/build.gradle'
            }
        }
        stage('build dockerimage') {
            steps {
                script {
                    dir('oven') {
                        def image = docker.build("munhunger/highly-oven")

                        docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
                            image.push("${env.BUILD_NUMBER}")
                            image.push("latest")
                        }
                    }
                }
            }
        }
    }
}

问题是似乎无法将它部署到我的 docker swarm。 我只是不断收到invalid mount config for type "bind": bind source path does not exist。这是使用 Portainer 部署它的时候。我是否配置错误或发生了什么?

编辑: 我测试了使用docker stack deploy -c jenkins.yml jenkins部署以下撰写文件

version: '3'
services:
  jenkins:
    image: munhunger/jenkins
    container_name: "jenkins"
    ports:
      - "81:8080"
    environment:
      - minio_url=<URL>
      - minio_access=<ACCESS>
      - minio_secret=<SECRET>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.jenkins/workspace:/root/.jenkins/workspace
      - /var/lib/jenkins:/var/lib/jenkins
      - /var/lib/docker:/var/lib/docker

但我仍然收到invalid mount config for type "bind": bind source path does not exist

【问题讨论】:

    标签: docker jenkins docker-compose jenkins-pipeline docker-swarm


    【解决方案1】:

    没有理由使用绑定挂载或 docker 套接字在 docker 容器中使用 Jenkins。使用命名卷来存储重要(持久)配置数据很好,但您可以使用 docker 命令构建映像,而无需使用主机 docker 套接字。

    https://hub.docker.com/r/jenkins/jenkins/

    https://hub.docker.com/_/docker/(码头工人中的码头工人)

    http://vfarcic.github.io/jenkins-swarm/#/cover

    【讨论】:

      【解决方案2】:

      你需要使用 docker compose version: '3'or greater 来部署服务到 swarm。 https://docs.docker.com/engine/swarm/stack-deploy/

      使用docker stack deploy 部署撰写文件 - https://docs.docker.com/engine/swarm/stack-deploy/

      撰写参考 - https://docs.docker.com/compose/compose-file/

      仅供参考 - docker compose v3 不支持 build,您需要将图像提供给 swarm 才能部署它。

      【讨论】:

      • 我尝试了所有这些(查看我的编辑)但我仍然得到相同的结果
      • 查看 docker 事件日志并查看它抱怨的源卷目录。