多线docker运行命令

我有一个jenkinspipe道:

node('some_vm') { stage('Build'){ sh '''\\ docker run --name my_container --privileged -v /dev/vboxdrv:/dev/vboxdrv\\ -v /usr/bin/vboxheadless:/usr/bin/vboxheadless\\ -v /usr/bin/vboxmanage:/usr/bin/vboxmanage\\ -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/\\ -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/\\ -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/\\ -v /usr/lib/virtualbox/:/usr/lib/virtualbox/\\ -v /etc/udev/rules.d/60-vboxdrv.rules:/etc/udev/rules.d/60-vboxdrv.rules\\ -v /sbin/lsmod:/sbin/lsmod\\ -v /sbin/modprobe:/sbin/modprobe\\ -v /lib/x86_64-linux-gnu/libssl.so.1.0.0:/lib/x86_64-linux-gnu/libssl.so.1.0.0\\ -v /lib/x86_64-linux-gnu/libcrypto.so.1.0.0:/lib/x86_64-linux-gnu/libcrypto.so.1.0.0\\ -v /usr/bin/vboxsdl:/usr/bin/vboxsdl\\ -v /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0:/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0\\ -v /usr/lib/x86_64-linux-gnu/libcaca.so.0:/usr/lib/x86_64-linux-gnu/libcaca.so.0\\ -v /lib/x86_64-linux-gnu/libslang.so.2:/lib/x86_64-linux-gnu/libslang.so.2\\ -v /home/jenkins/workspace/test/:/config/\\ -v /home/jenkins/workspace/test/vms:/root/VirtualBox\\ VMs/\\ -e VAGRANT_1 -e VAGRANT_2 -e VAGRANT_3 test_image\\ ''' } } 

但它总是失败,错误:

 "docker run" requires at least 1 argument(s). See 'docker run --help'. 

我尝试了不同的方法来实现多线docker运行命令,但迄今没有运气。

也许有人对此有一些想法?

这是一个简单的groovy脚本:

 node { stage('check java') { sh "java -version " } } 

在shellcript中多行:

 echo "hello-world" && \ echo "foo-bar" 

然后按“向上”箭头从历史logging中获取命令,并显示;

 echo "hello-world" && echo "foo-bar" 

重写你的命令:

 node('some_vm') { stage('Build'){ sh "docker run --name my_container --privileged -v /dev/vboxdrv:/dev/vboxdrv \ -v /usr/bin/vboxheadless:/usr/bin/vboxheadless \ -v /usr/bin/vboxmanage:/usr/bin/vboxmanage \ -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/ \ -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/ \ -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/ \ -v /usr/lib/virtualbox/:/usr/lib/virtualbox/ \ -v /etc/udev/rules.d/60-vboxdrv.rules:/etc/udev/rules.d/60-vboxdrv.rules \ -v /sbin/lsmod:/sbin/lsmod \ -v /sbin/modprobe:/sbin/modprobe \ -v /lib/x86_64-linux-gnu/libssl.so.1.0.0:/lib/x86_64-linux-gnu/libssl.so.1.0.0 \ -v /lib/x86_64-linux-gnu/libcrypto.so.1.0.0:/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 \ -v /usr/bin/vboxsdl:/usr/bin/vboxsdl \ -v /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0:/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 \ -v /usr/lib/x86_64-linux-gnu/libcaca.so.0:/usr/lib/x86_64-linux-gnu/libcaca.so.0 \ -v /lib/x86_64-linux-gnu/libslang.so.2:/lib/x86_64-linux-gnu/libslang.so.2 \ -v /home/jenkins/workspace/test/:/config/ \ -v /home/jenkins/workspace/test/vms:/root/VirtualBox \ -e VAGRANT_1 -e VAGRANT_2 -e VAGRANT_3 test_image" } } 

这个问题是通过在Dockerfile中为CMD指令使用JSON格式解决的。 看来容器内的bash有限制,因此bash不能正确处理。 我还决定引用Docker API,而不是使用命令行项: https : //jenkins.io/doc/book/pipeline/docker