bash - 无法运行添加到现有Docker容器的脚本

标签 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镜像随附的执行几个常用功能的脚本将镜像称为容器而不是镜像,因此我将脚本添加到容器对脚本没有影响,这就是为什么我不断获取no文件或目录的原因错误。

该脚本中的行是:docker run --rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript $@
当然,这是针对图片而不是容器的。

一旦我发现我尝试使用exec而不是run来运行它,并且运行时没有错误,如下所示:
docker exec -it container_name mynewscript

最佳答案

原因是脚本的$ PATH中没有“/ usr / local / bin”,因此可以在脚本中显式使用/ usr / local / bin / myscript。或先在脚本中导出$ PATH。

关于bash - 无法运行添加到现有Docker容器的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40210903/

相关文章:

javascript - 如何让 mocha 递归地在所有子文件夹中执行测试?

docker - Google Cloud Composer 与 Docker 上的 Airflow

node.js - 在 docker 容器中构建 NodeJS webpack

python-3.x - tensorflow gpu docker 图像中的 Python 3.6

bash - 使用awk划分文件中每一行的第一个条目和最后一个条目

linux - 如何更改多个文件的编码?

linux - 带文件路径参数的 Windows 10 Bash 和 Google Chrome

bash - 在 sed 中仅打印 <start> 和 <end> 之间的匹配模式

在 hyperledger 结构上安装我的链代码时,docker build 被禁用错误

Docker 远程 API 过滤器已退出