2017-01-01 71 views
2

CMD [“./run-nginx.sh”]脚本不执行并抛出panic:standard_init_linux.go:175:exec用户进程导致“exec格式错误”[恢复]。为什么这样?你能帮助:(我的机器是win10和泊坞窗版本:泊坞版本1.12.3,为什么我的docker-cmd不能用sh执行?

Dockerfile

FROM nginx 
ADD run-nginx.sh /usr/app/src/ 
ADD setup-index-page.sh /usr/app/src/ 
WORKDIR /usr/app/src/ 
RUN chmod +x run-nginx.sh 
RUN chmod +x setup-index-page.sh 
CMD ["./run-nginx.sh"] 

run-nginx.sh

#!/usr/bin/env bash 
./setup-index-page.sh 
exec nginx -g 'daemon off;' 

设置 - index-page.sh

#!/usr/bin/env bash 
container_id=${hostname} 
color=${container_id:0:6} echo "<body>Serving you from container id: ${hostname}</body>" > /usr/share/nginx/html/index.html 

响应

panic: standard_init_linux.go:175: exec user process caused "exec format error" [recovered] 
panic: standard_init_linux.go:175: exec user process caused "exec format error" 
2017-01-01T06:48:38.776636000Z 
goroutine 1 [running, locked to thread]: 
panic(0x88f8a0, 0xc820136a10) 
+2

是否有可能你试图在windows docker下运行这个应用程序时,你应该使用linux docker? –

+0

对不起,我不使用Docker容器在Linux上因为使用微软的技术。 –

+0

好nginx好像是一个linux容器。那么您的意思是,您使用的是微软技术? –

回答

3

鉴于您将卷从Windows映射到Linux,很可能您的* .sh文件具有Windows样式(CRLF)行结尾。如果您将它们转换为Unix/Linux风格(LF),则应该可以。

我不确定在Windows上检查和修复行尾的正确工具,但Notepad ++应该能够做到。

+0

yessssss :)我用Notepad ++编译并保存* .sh文件。它已经结束了。谢谢。 –

1

我有一个Linux泊坞窗后端测试你的代码我的系统上(OSX实际,所以没有什么搬运工后端操作系统运行的问题),它工作得很好(虽然我没没有获得容器ID)。我认为你的问题是你已经在你的Windows环境中配置docker来运行windows容器,而不是linux。

0

如果您使用脚本作为容器的入口点,它可能以某种方式将DOS回车符添加到行的末尾。因此,您的shebang将在Linux shell中显示为#!/bin/bash^M。 vim中可能会隐藏^M。看到它,运行:

vim -U NONE -u NONE filename 

要删除它,从VIM内运行:

:%s/\r//g 

注:确保先运行上面的选项活力。

这最常见的原因是在Windows中编辑文件。但是,如果您使用docker exec-t标志运行cat来创建文件,也会发生这种情况。 -t标志导致在TTY模式下执行,该模式在行的末尾打印DOS回车符。而不用运行标志:

docker exec mycontainer cat /path/to/file > file_on_host 
相关问题