[英]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.