首页 > 解决方案 > 使用 Docker 代理 args 的变量时无法指定标志?

问题描述

我正在尝试使用 Jenkins 管道为我的 Docker 代理安装一个卷。以下是我的 JenkinsFile:

pipeline {
    agent none
    environment {
        DOCKER_ARGS = '-v /tmp/my-cache:/home/my-cache'
    }
    stages {
        stage('Build') {
            agent {
                docker {
                    image 'my-image:latest'
                    args '$DOCKER_ARGS'
                }
            }
            steps {
                sh 'ls -la /home'
            }
        }
    }
}

遗憾的是它无法运行,从 pipeline.log 文件中可以看到以下内容。

java.io.IOException: Failed to run image 'my-image:latest'. Error: docker: Error response from daemon: create  /tmp/my-cache: " /tmp/my-cache" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
See 'docker run --help'.

但是,以下 JenkinsFile确实有效

pipeline {
    agent none
    environment {
        DOCKER_ARGS = '/tmp/my-cache:/home/my-cache'
    }
    stages {
        stage('Build') {
            agent {
                docker {
                    image 'my-image:latest'
                    args '-v $DOCKER_ARGS'
                }
            }
            steps {
                sh 'ls -la /home'
            }
        }
    }
}

唯一的区别是-v标志是在环境变量之外硬编码的。

我是 Jenkins 的新手,所以我一直在努力寻找有关这种行为的任何文档。有人可以解释为什么我不能args完全在环境变量中定义我的 Docker 代理吗?

标签: jenkinsjenkins-pipeline

解决方案


推荐阅读