我有一个运行没有问题的容器。我添加了一个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 $@
答案 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