我有一个运行正常的容器。我添加了一个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/