use Jenkins shell run docker exeC语言 i docker-name bash" no response



当我运行"docker exec-it docker name bash">在centOS7服务上,它将进入docker容器并可以运行"python xx.py config.yaml">执行一些工作。但是如果我使用Jenkins shell运行";docker exec-it docker name bash">,它将没有响应,我写"python xx.py config.yaml">后面,Jenkins显示[python:无法打开文件'xxx.py':[Ernno2]没有这样的文件或目录],我认为这个错误没有进入docker容器,所以在docker容器中找不到python文件。如何使用Jenkins shell进入docker容器。

当您运行docker exec -it docker-name bash时,您会在连接到控制台的容器中获得一个交互式shell,并且您键入到控制台的下一个命令将在该shell中执行。

但詹金斯没有控制台。它正在执行一个脚本,标准输入连接到一个null设备(读取时总是返回文件结尾(。因此,实际上它正在执行相当于的操作

docker exec -it docker-name bash </dev/null(/dev/null是空设备,<将其连接到命令的标准输入(。如果你在控制台上这样做,什么都不会发生,你会再次得到原始提示。

但在这种情况下,你不必也不应该运行bash。您给docker exec一个要在容器中运行的命令,它就会在那里运行。所以你只需要做

docker exec -i docker-name python xx.py config.yaml

并运行python命令,打印任何输出,当命令结束时,再次断开与容器的连接。

我省略了-t,因为它指示docker使用终端(控制台(,但Jenkins没有任何控制台,只有-i,指示它连接stdin、stdout和stderr就足够了。

现在还有一种方法可以在bash的标准输入上发送命令,类似于控制台的操作,但我强烈建议在尝试之前阅读bash的文档。

最新更新