Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker.image().inside()不';t在我的图像中运行sh命令_Docker_Jenkins_Jenkins Pipeline - Fatal编程技术网

docker.image().inside()不';t在我的图像中运行sh命令

docker.image().inside()不';t在我的图像中运行sh命令,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,我正在写詹金斯管道。我正在创建一个docker映像,该映像运行来自python virtualenv的命令(在映像内部)。我在创建docker映像时创建此虚拟环境。当我做以下事情时: stage() { steps { script { def dockerImage = docker.build('-f <path_to_dockerfile> .') dockerImage.inside() { sh 'venv/bin/iso

我正在写詹金斯管道。我正在创建一个docker映像,该映像运行来自python virtualenv的命令(在映像内部)。我在创建docker映像时创建此虚拟环境。当我做以下事情时:

stage() {
  steps {
    script {
      def dockerImage = docker.build('-f <path_to_dockerfile> .')
      dockerImage.inside() {
        sh 'venv/bin/isort src'
      }
    }
  }
}

我做错了什么吗?

如果仔细查看Jenkins日志,它执行的
docker run
命令可以模拟工作区环境
image.inside{…}
bind将工作区目录装载到同一路径的容器中,将当前目录重写为工作区目录,并重写默认命令等

我认为这里有两个很好的选择:

  • 在执行命令时,显式指定程序的绝对路径

    dockerImage.inside() {
      sh '/app/venv/bin/isort src'
    }
    
  • 使用
    image.run
    以“正常”运行映像,可以使用
    -v
    选项将工作区目录的装载部分绑定到容器中。这与您运行容器的方式相同

    dockerImage.run("-v ${env.WORKSPACE}/src:/app/src")
    
    此构造将运行图像中的任何默认
    CMD
    ;问题中的Dockerfile中似乎缺少这一行


  • 您是否尝试过
    sh'/app/venv/bin/isort src'
    ?如果我尝试了
    pwd
    ,它将显示主机中jenkins工作区的路径。而且,此路径没有
    venv
    ,并且
    /app/venv/bin/isort
    是docker映像内的路径。从这里,我假设我的命令没有在映像中运行。另外,我希望
    dockerImage.inside(){sh'venv/bin/isort src'}
    应该触发
    docker run-it-v venv/bin/isort src
    。但我在詹金斯的工作日志中没有看到这一点。选项一应该比选项二更可取,因为选项二将被一个
    代理{dockerfile true}
    替换,以便在一行中自动正确完成所有这些操作。谢谢@David和@Thanh!你的建议奏效了。我误解了什么。谢谢你的帮助!
    dockerImage.run("-v ${env.WORKSPACE}/src:/app/src")