容器命令'/start.sh'未找到或不存在,容器的入口点是shell脚本

bob*_*e01 8 docker dockerfile

项目内容:

rob@work:~/git/proj $ ls
lib     node_modules  props.json    start.sh
app.js  Dockerfile    package.json  README.md
Run Code Online (Sandbox Code Playgroud)

start.sh ..

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

# do things
/some/other/stuff

echo "Starting app .."
node app.js
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

构建泊坞窗图像:

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
Run Code Online (Sandbox Code Playgroud)

运行docker image:

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..
Run Code Online (Sandbox Code Playgroud)

Utk*_*kar 35

在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
Run Code Online (Sandbox Code Playgroud)

  • Omg ...由于这个原因丢失了很多次...我克隆了一个git存储库并忘记了Git for Windows将LF转换为CRLF(并且在推送时反其道而行之). (6认同)
  • 它确实有效,谢谢!对于其他人,请注意*脚本文件*本身必须使用LF样式的行结尾(意味着行应使用\n作为行结尾而不是\ r \n). (4认同)
  • 这对我来说是正确的答案(运行Docker for Windows),我使用VS Code来修改'.sh'文件,忘记了它将用CR-LF行结尾保存它.对于没有Sublime Text的人,可以使用Notepad ++将这些更改回Linux行结尾. (4认同)

cuo*_*glm 15

你有一些问题:

  • 您必须使用从当前目录./start.sh运行该start.sh文件.在root中/start.sh运行,它不存在.start.sh/

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

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

  • 我不得不将bash脚本中的行结尾从CRLF更改为LF.使用CRLF行结尾,我得到了同样的错误. (6认同)

Opt*_*mus 6

就我而言,#!/bin/bash没有用。我需要使用#!/bin/sh