मैं अपना नोड.जेएस ऐप डॉकटराइज करने की कोशिश कर रहा हूं। जब कंटेनर बनाया जाता है तो मैं चाहता हूं कि यह एक git cloneऔर फिर नोड सर्वर शुरू करे। इसलिए मैंने इन ऑपरेशनों को एक .sh स्क्रिप्ट में रखा। और स्क्रिप्ट को ENTRYPOINT में एकल कमांड के रूप में चलाएं:
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y build-essential libssl-dev gcc curl npm git
#install gcc 4.9
RUN apt-get install -y software-properties-common python-software-properties
RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test
RUN apt-get update
RUN apt-get install -y libstdc++-4.9-dev
#install newst nodejs
RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
RUN apt-get install -y nodejs
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD package.json /usr/src/app/
RUN npm install
ADD docker-entrypoint.sh /usr/src/app/
EXPOSE 8080
ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"]
मेरा docker-entrypoint.sh इस तरह दिखता है:
git clone git@<repo>.git
git add remote upstream git@<upstream_repo>.git
/usr/bin/node server.js
इस छवि को बनाने और चलाने के बाद:
docker run --env NODE_ENV=development -p 8080:8080 -t -i <image>
मैं ला रहा हूँ:
docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
मैंने कंटेनर में शेल किया है और docker-entrypoint.sh की अनुमति है:
-rw-r--r-- 1 root root 292 Aug 10 18:41 docker-entrypoint.sh
तीन प्रश्न:
क्या मेरी बैश स्क्रिप्ट में गलत सिंटैक्स है?
छवि में जोड़ने से पहले मैं किसी bash फ़ाइल की अनुमति कैसे बदल सकता हूँ?
बैश स्क्रिप्ट का उपयोग किए बिना प्रविष्टि में कई गिट कमांड चलाने का सबसे अच्छा तरीका क्या है?
धन्यवाद।
.shविस्तार एक भ्रामक धारणा के बारे में जो दुभाषियों यह निष्पादित कर सकते हैं छोड़ देता है। आप इसे बाहर ले जाने पर विचार कर सकते हैं - यह UNIX आदेशों के विस्तार के लिए पारंपरिक नहीं है (आप ls.elfउदाहरण के लिए नहीं चलते हैं )।
execइस तरह से एक खोल दे सकते हैं ? यह bashउपसर्ग की जरूरत नहीं होगी ।