如何修复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 run
和 bash
,
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 的 Apache httpd 容器意外关闭(SIGTERM)
如何修复 Docker“/usr/src/php/ext/mcrypt 不存在”构建错误?