【问题标题】:Cannot run script added to existing docker container无法运行添加到现有 docker 容器的脚本
【发布时间】:2017-03-05 18:53:33
【问题描述】:

我有一个正在运行的容器,没有任何问题。我添加了一个 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 镜像附带的执行几个常用功能的脚本调用 image 而不是 container 所以我将脚本添加到容器对脚本没有影响,这就是为什么我不断收到无文件或目录错误。

有问题的脚本中的行是: docker run --rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript $@

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

一旦我注意到我尝试使用 exec 而不是 run 运行它并且它运行时没有错误,就像这样:

docker exec -it container_name mynewscript

【问题讨论】:

  • 拜托,你能显示你的 docker 文件吗?

标签: bash docker


【解决方案1】:

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

【讨论】:

  • 这让我感到困惑,其他两个脚本(图像附带)完美执行。我的脚本位于同一位置,/usr/local/bin,并且以完全相同的方式调用。似乎它应该工作。我将编辑问题以包括它是如何被调用的。
  • 我将 sn-ps 添加到示例中并找出问题所在。主机上调用和运行容器内其他脚本的脚本是针对映像而不是容器运行的,因此我添加到容器中的脚本不存在。
  • @jcalton88 我认为差异来自脚本的所有者(不同的用户不同的.bashrc)。您可以在脚本中回显 $PATH 以查找根本原因。
  • 不会的。主机上的脚本可以毫无问题地找到图像中的其他两个脚本,但即使它存在于同一位置(在 $PATH 中)也找不到我的添加。一旦我使用提交的更改重建图像,一切都按预期工作。编辑:在我完成之前提交。 -- 主机脚本将运行调用 docker 映像而不是容器,所以我的更改不存在那里。我能够将相同的调用复制到容器中,并且效果也很好。抱歉,如果这听起来不连贯,我是 docker 新手,所以我可能没有使用正确的术语。
【解决方案2】:

当我添加 sn-ps 来帮助解释问题时,我发现了问题和解决方案。

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

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

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

所以 docker 镜像附带的用于执行几个常用功能的脚本调用镜像而不是容器,所以我将脚本添加到容器对脚本没有影响,这就是为什么我不断收到无文件或目录错误的原因.

有问题的脚本中的行是:

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

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

一旦我注意到我尝试使用 exec 而不是 run 运行它并且它运行时没有错误,就像这样:

docker exec -it container_name mynewscript

【讨论】:

  • 编辑了问题以包含答案。
猜你喜欢
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2021-09-30
  • 2021-05-28
  • 1970-01-01
相关资源
最近更新 更多