无法使用shell脚本启动节点应用程序

时间:2016-09-05 11:56:53

标签: node.js docker

我创建了一个node.js Docker镜像。 在 var_dump($results[0]['type']); 的末尾使用CMD node myapp.js,它就会启动。 但是当我使用Dockerfile时,它会失败。

这就是CMD /root/start.sh的样子:

start.sh

以下是#!/bin/bash node myapp.js 的重要内容:

Dockerfile

使用FROM debian:latest COPY config/start.sh /root/start.sh RUN chmod +x /root/start.sh WORKDIR /my/app/directory RUN apt-get install -y wget && \ wget https://nodejs.org/dist/latest-v5.x/node-v5.12.0-linux-x64.tar.gz && \ tar -C /usr/local --strip-components 1 -xzf node-v5.12.0-linux-x64.tar.gz && \ rm -f node-v5.12.0-linux-x64.tar.gz && \ ln -s /usr/bin/nodejs /usr/bin/node # works: CMD node myapp.js # doesn't work: CMD /root/start.sh 我得到:docker logs 但我不明白,因为如果我在Dockerfile中添加standard_init_linux.go:175: exec user process caused "no such file or directory",我可以看到该文件存在。 我还尝试在我的脚本中使用完整路径:

RUN ls /root

但没有改变。那可能是什么问题?

2 个答案:

答案 0 :(得分:1)

我见过的最常见的错误是在Windows系统上创建start.sh并使用不同的字符编码或包含Windows换行符保存文件。 /bin/bash^M/bin/bash不同,但您不会在Windows上看到该换行符。您还希望以ascii编码保存文件,而不是任何多字符UTF编码。

答案 1 :(得分:1)

使用docker run -entrypoint="/bin/bash" -i your_image

您使用的是dockerfile CMD shell表单。如文档中所述,默认shell二进制文件为/bin/sh,而不是/bin/bash第1行中的预期start.sh

或尝试使用 exec表单,即CMD ["/root/start.sh"]