繁体   English   中英

无法使用Shell脚本启动节点应用

[英]Unable to start node app with shell script

我创建了一个node.js Docker映像。 在我的Dockerfile末尾使用CMD node myapp.js ,它将启动。 但是,当我使用CMD /root/start.sh ,它将失败。

这就是我的start.sh样子:

#!/bin/bash
node myapp.js

这是我的Dockerfile的重要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我得到: standard_init_linux.go:175: exec user process caused "no such file or directory"但我不明白,因为如果在Dockerfile中添加RUN ls /root ,我可以看到该文件存在。 我还在脚本中尝试了完整路径:

#!/bin/bash
/usr/bin/node /my/app/directory/myapp.js

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

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

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

您使用的是dockerfile CMD外壳形式 如文档中所述,默认的shell二进制文件是/bin/sh ,而不是您在start.sh第1行中期望的/bin/bash

或者尝试使用exec形式 ,即CMD ["/root/start.sh"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM