【问题标题】:Run a docker command from Groovy script从 Groovy 脚本运行 docker 命令
【发布时间】:2015-10-01 15:36:16
【问题描述】:

我有一些 docker 命令,我想用 Groovy 脚本运行它们(在 Ubuntu 环境下工作)

以下命令在终端中正常工作:

docker exec -it my_docker bash -c '/opt/someFolder/someScript.sh'

但是,当我从 Groovy 脚本运行此命令时,什么也没有发生:

['/bin/sh', '-c', "docker exec -it my_docker bash -c '/opt/someFolder/someScript.sh'"].execute().text.trim() 

可能是什么原因?

【问题讨论】:

  • 您的进程是否可能正在写入 stderr 而不是 stdout?

标签: groovy docker


【解决方案1】:

使用

docker exec -t my_docker bash -c '/opt/someFolder/someScript.sh'

不要使用-ti,只需使用-t。使用 docker exec 简单地运行脚本时,您无法进行交互,尤其是通过任何 CI。

【讨论】:

    【解决方案2】:

    它可能在标准输出上生成了太多数据,因此缓冲区已满,进程阻塞。

    代替:

    ['/bin/sh', '-c', "docker exec -it my_docker bash -c '/opt/someFolder/someScript.sh'"].execute().text.trim() 
    

    做:

    def stdout = new StringWriter()
    def stderr = new StringWriter()
    ['/bin/sh', '-c', "docker exec -it my_docker bash -c '/opt/someFolder/someScript.sh'"].execute().waitForProcessOutput(stdout, stderr)
    
    println "OUTPUT: " + stdout.toString()
    println "ERRORS: " + stderr.toString()
    

    【讨论】:

    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多