无法运行添加到现有docker容器的脚本

时间:2016-10-24 04:51:43

标签: bash docker

我有一个运行没有问题的容器。我添加了一个bash脚本来补充容器中已有的其他几个脚本。 docker映像将2脚本复制到/ usr / local / bin,可以使用docker exec -c container-name existingscript访问它们。

我将自己的脚本添加到同一目录中,当运行相同的命令时,我得到一个错误,exec无法运行脚本:没有文件或目录,脚本不在$ PATH中。我检查路径,确定,列出了/ usr / local / bin。我检查了权限,脚本是755。

然后我用docker exec -it mycontainer bash打开一个交互式shell,并运行/ usr / local / bin / myscript,它运行没有问题。

为什么我不能像容器外部那样运行脚本(就像图像中包含的那样)。这三个函数每天几乎具有相同的功能,不使用任何特殊程序,一个列出文件,一个添加文件,一个读取文件。

基础是Ubuntu。

编辑:找到我遇到问题的地方。提供答案以防其他人碰巧犯同样的错误。

EDIT-2:所以docker镜像附带的脚本执行几个常用功能会调用图像而不是容器,所以我将脚本添加到容器中对脚本没有影响,这就是为什么我一直收到无文件或目录错误。

相关脚本中的行是: <!DOCTYPE html> <html lang="en"> <head> <title>Bootstrap Case</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body onload="myFunction()"> <div id="div1" class="round1"> <table> <tr> <td> <img src="html5.gif" alt="Mountain1" style="width:128px;height:128px;"> <br>If a browser cannot find an image, it will display the alternate text </td> <td> <img class="up" src="pic_mountain.jpg" style="width:138px;height:70px;"> </td> </tr> </table> </div> <div id="div2" class="round1"> <table> <tr> <td> <img src="pic_mountain.jpg" alt="Mountain1" style="width:128px;height:128px;"> <br>If a browser cannot find an image, it will display the alternate text </td> <td> <img class="up" src="html5.gif" style="width:138px;height:70px;"> </td> </tr> </table> </div> <br> <div align="left"> <div class="container"> <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#home" onclick="myFunctionone()">One</a></li> <li><a data-toggle="tab" href="#menu1" onclick="myFunction1()">Two</a></li> <li><a data-toggle="tab" href="#menu1">Functional</a></li> <li><a data-toggle="tab" href="#menu3">Three</a></li> </ul> <div class="tab-content"> <div id="home" class="tab-pane fade in active"> <h3>One</h3> <p>If a browser cannot find an image, it will display the alternate textIf a browser cannot find an image, it will display the alternate text.</p> </div> <div id="menu1" class="tab-pane fade"> <h3>Two</h3> <p>If a browser cannot find an image, it will display the alternate textIf a browser cannot find an image, it will display the alternate text</p> </div> <div id="menu2" class="tab-pane fade"> <h3>Three</h3> <p>If a browser cannot find an image, it will display the alternate textIf a browser cannot find an image, it will display the alternate text</p> </div> <div id="menu3" class="tab-pane fade"> <h3>Others</h3> <p>If a browser cannot find an image, it will display the alternate textIf a browser cannot find an image, it will display the alternate text</p> </div> </div> </div> </div> </body> </html>

当然,这是针对图像而不是容器。

一旦我注意到我尝试使用exec而不是运行它运行它并且运行没有错误,如下所示:

docker run --rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript $@

2 个答案:

答案 0 :(得分:1)

原因是&#34; / usr / local / bin&#34;不在脚本的$ PATH中,您可以在脚本中明确使用/ usr / local / bin / myscript。或者先在脚本中导出$ PATH。

答案 1 :(得分:1)

当我添加片段以帮助解释问题时,我发现了问题和解决方案。

因此,我使用另一个脚本从主机访问容器内的脚本,该脚本允许您根据switch case执行不同的操作。脚本是针对docker镜像而不是容器调用的,因此我添加的脚本实际上并不存在于图像中。

我修改了脚本来调用容器而不是图像,它按预期工作。

编辑:我用答案更新了问题,但我也在这里添加:

因此,docker镜像附带的脚本执行一些常用函数会调用图像而不是容器,因此我将脚本添加到容器对脚本没有影响,这就是为什么我一直得到no file或directory错误

相关脚本中的行是:

docker run --rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript $@

当然,这是针对图像而不是容器。

一旦我注意到我尝试使用exec而不是运行它运行它并且运行没有错误,如下所示:

docker exec -it container_name mynewscript