【问题标题】:Container command '/start.sh' not found or does not exist, entrypoint to container is shell script找不到或不存在容器命令“/start.sh”,容器的入口点是 shell 脚本
【发布时间】:2017-10-24 21:49:44
【问题描述】:

项目内容:

rob@work:~/git/proj $ ls
lib     node_modules  props.json    start.sh
app.js  Dockerfile    package.json  README.md

start.sh..

rob@work:~/git/proj $ cat start.sh 
#/bin/bash

# do things
/some/other/stuff

echo "Starting app .."
node app.js

Dockerfile ..

FROM somewhere.com/dependencyProj
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
COPY props.json /etc/someService.d/props.json
EXPOSE 4101

ENTRYPOINT ["/start.sh"]

构建 docker 镜像:

rob@work:~/git/proj $ docker build -t dx/proj:0.0.1 .
Sending build context to Docker daemon 59.99 MB
Step 1 : FROM somewhere.com/dependencyProj
latest: Pulling from dependencyProj
420890c9e918: Already exists 
8ff1af46fe3d: Already exists 
6db3a1c6f4ca: Already exists 
d82a90c4ea1b: Already exists 
f32685681727: Already exists 
797dfb291196: Already exists 
3a713b0b523e: Already exists 
a9c617bff63b: Already exists 
9ab84732ac6e: Already exists 
2a85e0afdd4d: Already exists 
a56b24146ce4: Already exists 
0a91b00da1f7: Already exists 
836b0e7c1105: Already exists 
Digest: sha256:36b7a32bd12b85cbb2fb3203d43807c9b8735d6ceb50d813b76bfe2e5c3ebeb4
Status: Downloaded newer image for somewhere.com/dependencyProj:latest
 ---> 7c52bbbc3feb
Step 2 : RUN mkdir -p /usr/src/app
 ---> Running in aab7cf1f7974
 ---> 250317f63adf
Removing intermediate container aab7cf1f7974
Step 3 : WORKDIR /usr/src/app
 ---> Running in f60088532610
 ---> 60f3d9fe88c4
Removing intermediate container f60088532610
Step 4 : COPY . /usr/src/app
 ---> 004e0a440fb5
Removing intermediate container f247d134d88b
Step 5 : COPY props.json /etc/someService.d/props.json
 ---> 03b48249c94c
Removing intermediate container a3636849765d
Step 6 : EXPOSE 4101
 ---> Running in 0056e5c20264
 ---> 867765176927
Removing intermediate container 0056e5c20264
Step 7 : ENTRYPOINT /start.sh
 ---> Running in 80ae316b0629
 ---> d1e65def77ce
Removing intermediate container 80ae316b0629
Successfully built d1e65def77ce

运行 docker 镜像:

rob@work:~/git/proj $ docker run -d dx/proj:0.0.1
0fd1f8087cc5be3e085454cf99b7a3795b9ce15909b0f416ae39380f93feaa44
docker: Error response from daemon: Container command '/start.sh' not found or does not exist..

【问题讨论】:

  • 它是./start.sh
  • 如果使用./start.sh,我会得到docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: exec format error".
  • 您是否为start.sh 添加了可执行权限?试试chmod +x start.sh
  • 如果我将RUN chmod +x start.sh 放在ENTRYPOINT ["./start.sh"] 之前会出现同样的错误
  • 你的shebang错了,是#!/bin/bash,不是#/bin/bash

标签: docker dockerfile


【解决方案1】:

在 Windows 上,在构建 docker 映像时,我也曾经在构建映像后遇到相同的错误,即缺少 shell 脚本。路径和 shebang 也是正确的。

后来,我读到一些可能是由于编码问题。我刚刚在 sublime 编辑器中打开了文件,然后..VIEW-> Line Endings-> UNIX 并保存了文件,并重建了图像。一切正常。

当我从 Windows 构建图像时遇到此错误。

其他选项:

有时,我们忘记手动更改行格式。所以,我们可以做的是在 dockerfile 中的 EntryPoint 之前添加这个 Run 语句。它将以 LF 格式对文件进行编码。

 RUN sed -i 's/\r$//' $app/filename.sh  && \  
        chmod +x $app/filename.sh

ENTRYPOINT $app/filename.sh

【讨论】:

  • 它确实有效,谢谢!对于其他人,请注意 脚本文件 本身必须使用 LF 样式的行尾(这意味着行应该使用 \n 而不是 \r\n 作为行尾)。
  • Omg...因此丢失了很多次...我克隆了一个 git 存储库并忘记了 Git for Windows 将 LF 转换为 CRLF(并且在您推送时执行相反的操作)。
  • 这对我来说是正确的答案(运行 Docker for Windows),我使用 VS Code 修改了一个“.sh”文件,忘记了它会以 CR-LF 行结尾保存它。对于没有 Sublime Text 的人,您可以使用 Notepad++ 将这些更改回 Linux 行尾。
  • 谢谢!这也是我的问题。谢天谢地,VSCode 让更改行尾变得非常容易,但它让我困惑了一段时间。奇怪的错误信息。它存在,我假设我会收到一些filename.sh: corrupted 错误消息或其他东西。相反,错误消息是 does not exist 这让我失望了
  • 我的问题也一样。每次在我的 dockerfile 中,当我复制 crontab 或任何脚本之类的 linux 系统文件时,都会在每行的末尾添加一些字符 ^m。我可以考虑在运行复制命令后在 dockerfile 中添加一个命令 dos2unix。我可以使用其他可靠的灵魂吗?
【解决方案2】:

你有一些问题:

  • 您必须使用./start.sh 从当前目录运行start.sh 文件。 /start.sh 在不存在的根/ 中运行start.sh

  • start.sh 脚本中的 shebang 行错误,必须是 #!/bin/bash

  • 您还必须通过运行chmod +x start.shstart.sh 设置可执行权限。

【讨论】:

  • 我不得不将 bash 脚本中的行尾从 CRLF 更改为 LF。使用 CRLF 行结尾,我得到了同样的错误。
  • 在这上面花了几个小时,这就是发生在我身上的事情,当我的 intellij 提交文件时它转换了文件结尾!
  • @Gnagy:值得回答。在我的设备上也是如此。
  • @Gnagy 谢谢,那是为我做的。总是小事啊。
  • @Gnagy 哇!就是这样!
猜你喜欢
  • 2018-04-10
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多