如何修复docker文件中的“sh:0:无法打开start.sh”?

Posted

技术标签:

【中文标题】如何修复docker文件中的“sh:0:无法打开start.sh”?【英文标题】:How to fix "sh: 0: Can't open start.sh" in docker file? 【发布时间】:2018-05-03 11:36:09 【问题描述】:

我创建了一个包含以下 CMD 的 docker 映像:

CMD ["sh", "start.sh"]

当我运行 docker 映像时,我在 Makefile 中使用以下命令

docker run --rm -v $PWD:/selenium $(DOCKER_IMAGE)

将文件从当前(主机)目录复制到 docker 的 /selenium 文件夹。这些文件包括用于硒测试的文件,以及文件start.sh。但是容器启动后,我立即收到错误

"sh: 0: Can't open start.sh"

也许主机卷安装在docker 之后命令已经运行?还有什么可以解释这个错误的,以及如何解决它?

也许有一种方法可以在 docker 中运行多个命令以查看发生了什么?喜欢

CMD ["ls", ";", "pwd", ";", "sh", "start.sh"]

更新

当我在 Dockerfile 中使用以下命令时

CMD ["ls"]

我得到了错误

ls: cannot open directory '.': Permission denied

额外信息

Docker 版本 1.12.6 入口点:WORKDIR /work

【问题讨论】:

您是否尝试过使用这里建议的/bin/sh:Running a script inside a docker container using shell script? 不能用简单的ls来解释我遇到的问题... 您运行的是什么版本/平台的 Docker?卷源有哪些权限,包括主机上的uid/gid? 您的图片的ENTRYPOINT 是什么?它是默认的 (/bin/sh -c) 吗?如果不是,也许这就是ls 失败的原因。 如果您解决了问题,请回答。如果没有,请提供您的环境的更多详细信息,以便我们弄清楚发生了什么(例如,一个完整的 Dockerfile 以便我们重现您的问题)。无论如何,您是否尝试运行pwd 来检查工作目录是什么? whoami 也可能有用。 【参考方案1】:
    使用ls -l检查权限。 使用sudo chmod 777 file_name 授予权限777。 重复您可能找到的其他文件。

【讨论】:

Victor 感谢您的编辑,但我认为这还不够。此外,他们将面临问题。最好说授予您要打开或执行的 .sh 文件的权限。【参考方案2】:

如果您尝试手动执行每个步骤,请使用 docker runbash

docker exec -it (container name) /bin/bash

查看错误会更方便快捷,可以更改权限,查看文件所在位置,再运行.sh文件后再试。

【讨论】:

【参考方案3】:

您将卷安装到容器中的 /selenium 文件夹。因此 start.sh 文件不会在您的工作目录中,而是在 /selenium 中。您想将卷挂载到工作目录中的 selenium 文件夹,然后确保命令引用这个新路径。

如果你使用 docker-compose 来运行容器的 yml 文件看起来像这样:

version: '3'

services:
  start:
    image: $DOCKER_IMAGE
    command: sh selenium/start.sh
    volumes:
      - .:/work/selenium

【讨论】:

以上是关于如何修复docker文件中的“sh:0:无法打开start.sh”?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复无法启动的docker容器

如何修复:Docker 的 Apache httpd 容器意外关闭(SIGTERM)

如何修复 Docker“/usr/src/php/ext/mcrypt 不存在”构建错误?

如何修复 Kafka Docker 容器抛出 0.0.0.0/0.0.0.0:2181:连接被拒绝?

如何修复 docker:获得权限被拒绝问题

如何修复 Docker 意外操作员错误?