2017-06-28 13 views
6

मैं केवल दो फ़ाइलों, Dockerfile और sayhello.sh युक्त एक निर्देशिका है:कैसे एक अल्पाइन डोकर कंटेनर में एक bash स्क्रिप्ट चलाने के लिए

. 
├── Dockerfile 
└── sayhello.sh 

Dockerfile पढ़ता

FROM alpine 
COPY sayhello.sh sayhello.sh 
CMD ["sayhello.sh"] 

और sayhello.sh बस शामिल

echo hello 

Dockerfile सफलतापूर्वक बनाता है:

[email protected] ~/d/s/trybash> docker build --tag trybash . 
Sending build context to Docker daemon 3.072 kB 
Step 1/3 : FROM alpine 
---> 665ffb03bfae 
Step 2/3 : COPY sayhello.sh sayhello.sh 
---> Using cache 
---> fe41f2497715 
Step 3/3 : CMD sayhello.sh 
---> Using cache 
---> dfcc26c78541 
Successfully built dfcc26c78541 

हालांकि, अगर मैं run करने की कोशिश यह मैं एक executable file not found in $PATH त्रुटि मिलती है:

[email protected] ~/d/s/trybash> docker run trybash 
container_linux.go:247: starting container process caused "exec: \"sayhello.sh\": executable file not found in $PATH" 
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sayhello.sh\": executable file not found in $PATH". 
ERRO[0001] error getting events from daemon: net/http: request canceled 

कोई व्याख्या कर सकते हैं कि इसका क्या कारण है? (मुझे debian:jessie-आधारित छवियों में समान स्क्रिप्ट में चलने वाली स्क्रिप्ट याद आती हैं, तो शायद यह अल्पाइन-विशिष्ट है)?

उत्तर

9

अल्पाइन/bin/डिफ़ॉल्ट खोल के बजाय/bin/bash

तो आप अपने sayhello.sh की पहली पंक्ति के रूप में एक कुटिया को परिभाषित करने

1) हो सकता है/bin/के रूप में श के साथ आता है श, इसलिए अपनी फ़ाइल sayhello.sh

#!/bin/sh

2) अपने अल्पाइन छवि में बैश स्थापित करते हैं, जैसा कि आप अपने Dockerfile

01 में इस तरह के एक लाइन के साथ, उम्मीद करने के बैश मौजूद है लगते हैं के साथ शुरू होगा

RUN apk add --update bash && rm -rf /var/cache/apk/*

1

CMD का उपयोग करके, डोकर PATH में खोज sayhello.sh है, लेकिन आप / जिसमें कॉपी PATH में नहीं है।

तो स्क्रिप्ट का निरपेक्ष पथ का उपयोग आप पर अमल करना चाहते हैं:

CMD ["/sayhello.sh"] 

Btw, के रूप में @ user2915097 कहा, सावधान कि अल्पाइन में इसका उपयोग करने अपनी स्क्रिप्ट के मामले में डिफ़ॉल्ट रूप से पार्टी नहीं है हो सकता है मामला।

1

सभी स्क्रिप्ट के लिए निष्पादन अनुमति प्रदान करना याद रखें।

FROM alpine 
COPY sayhello.sh /sayhello.sh 
RUN chmod +x /sayhello.sh 
CMD ["/sayhello.sh"] 
+1

डॉकरफ़ाइल में अनुदान निष्पादन अनुमति की आवश्यकता नहीं है यदि उसे पहले से ही अनुमति है – aerokite

0

यह answer पूरी तरह से सही है और ठीक काम करता है।

एक और तरीका नहीं है, तो आप अल्पाइन आधारित डोकर में bash स्क्रिप्ट चला सकते हैं

आप bellow

CMD ["sh", "sayhello.sh"] 

तरह सीएमडी बदलने की जरूरत है और यह भी काम करता है।

संबंधित मुद्दे