簡體   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