Ami*_*ani 32 docker dockerfile
我的ENTRYPOINT
脚本不执行并抛出 standard_init_linux.go:175: exec user process caused "no such file or directory"
.为什么这样?
$ docker build -t gilani/trollo . && docker run gilani/trollo
Sending build context to Docker daemon 126 kB
Step 1 : FROM vault:latest
---> 1f127f53f8b5
Step 2 : MAINTAINER Amin Shah Gilani <gilani@payload.tech>
---> Using cache
---> 86b885ca1c81
Step 3 : COPY vaultConfig.json /vault/config
---> Using cache
---> 1a2be2fa3acd
Step 4 : COPY ./docker-entrypoint.sh /
---> Using cache
---> 0eb7c1c992f1
Step 5 : RUN chmod +x /docker-entrypoint.sh
---> Running in 251395c4790f
---> 46aa0fbc9637
Removing intermediate container 251395c4790f
Step 6 : ENTRYPOINT /docker-entrypoint.sh
---> Running in 7434f052178f
---> eca040859bfe
Removing intermediate container 7434f052178f
Successfully built eca040859bfe
standard_init_linux.go:175: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM vault:latest
MAINTAINER Amin Shah Gilani <gilani@payload.tech>
COPY vaultConfig.json /vault/config
COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
docker-entrypoint.sh:
#!/bin/bash
echo 'Hello World!'
Run Code Online (Sandbox Code Playgroud)
$ docker build -t gilani/trollo . && docker run gilani/trollo
Sending build context to Docker daemon 126 kB
Step 1 : FROM vault:latest
---> 1f127f53f8b5
Step 2 : MAINTAINER Amin Shah Gilani <gilani@payload.tech>
---> Using cache
---> 86b885ca1c81
Step 3 : COPY vaultConfig.json /vault/config
---> Using cache
---> 1a2be2fa3acd
Step 4 : ENTRYPOINT echo 'hello world'
---> Using cache
---> ef5792a1f252
Successfully built ef5792a1f252
'hello world'
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM vault:latest
MAINTAINER Amin Shah Gilani <gilani@payload.tech>
COPY vaultConfig.json /vault/config
ENTRYPOINT ["echo", "'hello world'"]
Run Code Online (Sandbox Code Playgroud)
Dan*_*ard 63
我正在用一个非常类似的问题撕掉我的头发.在我的情况下/ bin/bash存在DID.但实际上问题是windows line endings.
在我的例子中,git存储库有一个带有Unix行结尾的入口点脚本(\n).但是当在Windows机器上检出存储库时,git决定尝试并且聪明并用windows行结尾替换文件中的行结尾(\ r \n).
这意味着shebang没有工作,因为它没有寻找/ bin/bash它正在寻找/ bin/bash\r \n
我的解决方案是禁用git的自动转换:git config --global core.autocrlf input然后再次检出存储库并重建
这里有一些更有用的信息: 如何更改行结束设置 ,这里 http://willi.am/blog/2016/08/11/docker-for-windows-dealing-with-windows-line-endings/
P.J*_*sch 33
vault:latest
图像不包含/bin/bash
您尝试使用shebang调用的图像#!/bin/bash
.您应该将其更改为#!/bin/sh
或从脚本中完全删除shebang.
Rya*_*len 12
另一种可能:
检查文件是否没有使用 Windows 行尾 (CRLF) 保存。如果是,用 Unix 行尾 (LF) 保存它,它会被找到。
没有看到你的形象,我最初的想法是你的图像中没有/ bin/bash.将docker-entrypoint.sh的第一行更改为:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
很可能会解决它.
小智 6
天啊我挣扎了2-3个小时!!感谢@Ryan Allen 对于我的情况,这是 CRLF 问题。我正在通过 ATOM 为詹金斯设置处理傀儡清单。确保如果您在 Windows 上使用 ATOM 或任何其他 IDE,当您将文件(尤其是 .sh)传输到 unix 时,请将其转换为 unix 格式。一旦转换,它就像魔术一样起作用。这是我在木偶文件中添加的内容:
exec {'dos2unix':
path => ['/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/puppetlabs/bin'],
command => 'dos2unix /dockerwork/puppet/jenkins/files/*',
subscribe => File['/dockerwork/puppet/jenkins/files/init.sh'],
}
Run Code Online (Sandbox Code Playgroud)
我在尝试构建 Dockerfile“入口点”( entrypoint.sh
) bash shell 脚本(在 .NET Core SDK 2.2 映像中执行)时遇到了类似的问题。脚本的开头有一行#!/bin/bash
,并且在执行期间docker-compose up
(成功构建后docker-compose build
,日志记录报告为web_1 | ./entrypoint.sh: line 1: #!/bin/bash: No such file or directory
.
使用 VS Code 检查文件,我注意到它报告了以下编码:
带 BOM 的 UTF-8
单击此按钮,我将获得以下选项Save with encoding
:
我选择保存为UTF-8(utf8),这解决了问题。
注意:我还发现了这篇文章What's the Difference between UTF-8 and UTF-8 without BOM?
我挣扎了几个小时,因为我没有注意到任何地方都解释说您需要将文件复制到 VM 可以访问文件的位置,最好是全局的,如下所示:
COPY docker-entrypoint.sh /usr/local/bin/
Run Code Online (Sandbox Code Playgroud)
(我原以为它应该是自动访问的,因为它是 dockerfile 上下文的一部分)
归档时间: |
|
查看次数: |
41916 次 |
最近记录: |