standard_init_linux.go: 190: निष्पादित उपयोगकर्ता प्रक्रिया का कारण "ऐसी कोई फ़ाइल या निर्देशिका नहीं है" - डॉकर


123

जब मैं विंडोज़ १० पर अपनी डॉकटर छवि चला रहा हूँ तो मुझे यह त्रुटि मिल रही है:

standard_init_linux.go:190: exec user process caused "no such file or directory"

मेरी docker फ़ाइल है:

FROM openjdk:8

EXPOSE 8080

VOLUME /tmp

ADD appagent.tar.gz /opt/app-agent
ADD services.jar app.jar
ADD run.sh /run.sh

# Install compiler and perl stuff
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y gcc-multilib
RUN apt-get install -y perl

# Install Percona Toolkit
RUN apt-get install --yes percona-toolkit
RUN ["chmod", "+x", "/run.sh"]
ENTRYPOINT ["/run.sh"]

और स्क्रिप्ट की शुरुआत #! / bin / sh से होती है

#!/bin/sh
set -e

JAVA_OPTS="-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/urandom"

if [ "${APPD_APP_NAME}" != "" ]; then
JAVA_AGENT="-javaagent:/opt/app-agent/javaagent.jar
fi

exec java ${JVM_OPTS} ${JAVA_OPTS} ${JAVA_AGENT} -jar /app.jar

ट्राई मेथड 1: ट्राई चेंजिंग #! / Bin / sh / to #! / Bin / bash लेकिन एक ही त्रुटि हो रही है।

ट्राई मेथड 2: डॉक फाइल में dos2unix जोड़ा गया

RUN apt-get install -y dos2unix
RUN dos2unix /run.sh

जवाबों:


177

नोटपैड ++ का उपयोग करें, संपादन पर जाएं -> ईओएल रूपांतरण -> सीआरएलएफ से एलएफ में परिवर्तन।


5
उत्तम! मेरे पास एक .sh फ़ाइल थी जो मेरे डॉकरीफाइल से चलाई जा रही थी। मैंने लाइन एंडिंग और टा डा को बदल दिया। धन्यवाद
मीठा मिर्च फिली

मुझे यह विकल्प नोटपैड ++ में 'एडिट टैब' में नहीं मिला, लेकिन मैंने इसे राइट राइट साइड बटन पर क्लिक करके विंडोज (सीआर एलएफ) लिखा है और मैंने यूनिक्स में बदल दिया है। आपका बहुत बहुत धन्यवाद!
टोबो

मुझे भी यही समस्या है और इसे आपकी सलाह के रूप में हल करना चाहिए। आपका बहुत बहुत धन्यवाद!
सच्चाईबेल truth२

धन्यवाद! यह अच्छी तरह से काम किया! मैं उसी मुद्दे से पीड़ित था।
लौहचुंबक

2
मुझे यह त्रुटि तब हुई जब मैं विंडोज़ पर क्रैंक डॉक इमेज बनाने और चलाने की कोशिश कर रहा था। यदि आप एक क्लोन रेपो पर इस समस्या में भाग लेते हैं, तो क्लोन के दौरान core.autocrlf सेटिंग का उपयोग करना उपयोगी हो सकता है, यदि हां, तो निष्पादित करें: से git config core.autocrlf input => (deleted the files from the repo; wasn't sure if git reset would reset the newlines) => git reset --hardकॉपी किया गया: github.com/LiveOverflow/PwnAdvt3-issues/11
एमिल जी

70

नीचे के रूप में प्रवेश बिंदु बदलें। इसने मेरे लिए काम किया

ENTRYPOINT ["sh","/run.sh"]

जैसा कि tuomastik ने टिप्पणियों में बताया है , डॉक्स को निष्पादन योग्य होने के लिए पहले पैरामीटर की आवश्यकता होती है:

ENTRYPOINT के दो रूप हैं:

ENTRYPOINT ["executable", "param1", "param2"] (निष्पादन फ़ॉर्म, पसंदीदा)

ENTRYPOINT command param1 param2 (शैल रूप)


मेरे लिए काम किया। इस मामले में, हमें शेल स्क्रिप्ट में #! / Bin / sh जोड़ने की भी आवश्यकता नहीं है। ENTRYPOINT में "श" का उल्लेख करना काम करता है
Gouravmoy मोहंती

10
क्या आप समझा सकते हैं कि "श" क्यों और कब आवश्यक है? मैंने कई उदाहरण बिना काम किए देखे।
ऑप्स

1
@ ऑप्स के बिना "sh", सामान्य शेल प्रसंस्करण स्रोत
tuomastik

2
यह बताता है कि अपनी ENTRYPOINT स्क्रिप्ट में मैं /bin/bashशेल दुभाषिया के रूप में उपयोग कर रहा था , लेकिन चूंकि मेरी छवि अल्पाइन आधारित है, इसलिए यह इसके साथ नहीं आया। मैं अपनी स्क्रिप्ट में बदल bashगया shऔर समस्या हल हो गई।
मोरफुज़

63

alpineछवि का उपयोग करते समय मेरे पास एक ही मुद्दा था ।

मेरी .shफ़ाइल में निम्नलिखित पहली पंक्ति थी:

#!/bin/bash

अल्पाइन में बैश नहीं है। इसलिए लाइन को बदल रहा है

#!/bin/sh

या के साथ बैश स्थापित करना

apk add --no-cache bash

मेरे लिए समस्या हल कर दी।


2
यह! एपलाइन के डॉकर हब पेज पर बोल्ड होना चाहिए।
हैशलॉक 4'20

हाँ, यह बात है। यदि आप बैश के बजाय docker image use वाली entrypoint.shफाइल का उपयोग कर रहे हैं ! Alpine#!/bin/sh
व्लादिमीर

17

मान लीजिए कि आप अल्पाइन कंटेनर में अपने गो बाइनरी को चलाते समय इस समस्या का सामना करते हैं। अपने बिन के निर्माण से पहले निम्नलिखित चर का निर्यात करें

# CGO has to be disabled for alpine
export CGO_ENABLED=0

फिर go build


Dockerfile के भीतर, गो बिल्ड लाइन से पहले ENV CGO_ENABLED = 0 जोड़ें। इसने मेरे लिए काम किया।
माधवन गणेश

इसलिए डॉकरफाइल में, यह होना चाहिए:RUN export CGO_ENABLED=0 && go build
बीएमडब्ल्यू

16

मेरे मामले में मैं से खत्म होने वाली लाइन बदलना पड़ा CRLFकरने LFके लिए run.shफ़ाइल और त्रुटि चला गया था।

आशा है कि ये आपकी मदद करेगा,
कर्स्टन


1
मुझे एक ही फाइल को बार-बार ठीक करते रहना है। यह ऐसा है जैसे विंडोज़ मुझे इसमें पारिस्थितिकी तंत्र में रखना चाहता है।
जोनाथन Czitkovics

@JonathanCzitkovics शायद आपको अपने git config और अपने कोड संपादक की सेटिंग की जाँच करनी चाहिए
KirKone

9

यह एक CRLF समस्या है। मैंने इसका उपयोग करके समस्या को ठीक किया:

git config --global core.eol lf

git config --global core.autocrlf input

find . -type f -print0 | xargs -0 dos2unix

आपका बहुत बहुत धन्यवाद! इसने मेरा दिन बचाया।
एलेक्स

8

"ऐसी कोई फ़ाइल या निर्देशिका" लिनक्स से नहीं आ रही है, और मैंने निम्नलिखित कारणों को देखा है:

पहला कारण वास्तव में आपके कंटेनर के अंदर फ़ाइल नहीं है। कुछ लोग इसे अपनी छवि में शामिल किए बिना होस्ट से कमांड चलाने का प्रयास करते हैं। कुछ लोग अपने कमांड को उस कमांड के ऊपर वॉल्यूम बढ़ाकर छाया करते हैं जिसे वे चलाना चाहते थे। यदि आप एक ही कंटेनर चलाते हैं, लेकिन आपके सामान्य प्रविष्टि बिंदु / cmd मान के बजाय एक शेल के साथ, और ls /path/to/cmdआप देखेंगे कि क्या यह मौजूद है।

अगला कारण गलत कमांड चल रहा है। यह अक्सर json / कमांड फॉर्मेटिंग को कमांड के साथ दिखाई देता है जिसे चलाने के लिए सही तरीके से पार्स नहीं किया जाता है। यदि आप एक कमांड को चलाने ["app",या कुछ इसी तरह की कोशिश करते हुए देखते हैं , तो डॉसन द्वारा जौनस स्ट्रिंग को पार्स नहीं किया गया था और लिनक्स कमांड को स्ट्रिंग के रूप में पार्स करने के लिए एक शेल का उपयोग करने की कोशिश कर रहा है। यह तब भी हो सकता है जब आप आर्ग को गलत करते हैं, जैसे कि चलाने की कोशिश करना -itएक संकेत है जिसे आपने छवि नाम के बाद झंडे लगाने की कोशिश की है जब उन्हें छवि नाम से पहले रखा जाना चाहिए।

शेल स्क्रिप्ट के साथ, यह त्रुटि दिखाई देती है यदि #!कंटेनर के अंदर मौजूद कमांड के अंक के साथ पहली लाइन मौजूद नहीं है। कुछ के लिए, यह bashएक ऐसी छवि में चलने की कोशिश कर रहा है जो केवल है /bin/sh। और आपके मामले में, यह स्क्रिप्ट में विंडोज लाइनफीड से हो सकता है। अपने संपादक में लिनक्स / यूनिक्स लाइनफीड पर स्विच करना सही होगा।

बायनेरिज़ के साथ, यह त्रुटि दिखाई देती है यदि एक लिंक की गई लाइब्रेरी गायब है। मैंने इसे अक्सर देखा है जब Go कमांड्स को संकलित किया जाता है libc, लेकिन muslबिना किसी पुस्तकालयों के बिना अल्पाइन के साथ या खरोंच पर चलाया जाता है। आपको या तो सभी लापता पुस्तकालयों को शामिल करना होगा या सांख्यिकीय रूप से अपना आदेश संकलित करना होगा। इन लाइब्रेरी लिंक्स को देखने के लिए, ldd /your/appअपने बाइनरी पर उपयोग करें।


3
धन्यवाद! खरोंच छवि में मेरे जाने के आवेदन के लिए, CGO_ENABLED = 0 का उपयोग करके पुनर्निर्माण करना पड़ा
मैनुअल रोनी गोम्स

मेरा मामला: 1. निष्पादन योग्य द्विआधारी अल्पाइन से निर्मित है, लेकिन आधार छवि जो चल रही कमांड है डेबियन है, इसलिए त्रुटि हुई।
inix

6

मैं अपने प्रतिनिधि के कारण टिप्पणी करने में असमर्थ हूं, लेकिन मैं सिर्फ जोड़ना चाहता था: VSCode उपयोगकर्ताओं के लिए , आप स्थिति पट्टी में CRLF पर क्लिक करके LRL में CRLF लाइन अंत को बदल सकते हैं , फिर LF का चयन करें और फ़ाइल को सहेजें।

मेरे पास एक ही मुद्दा था, और इसने इसे हल किया। VSCode के लिए अनुसरण करने के लिए चरण


4

नोटपैड ++ का उपयोग करते हुए एलएफ के साथ सीआरएलएफ की जगह

  1. नोटपैड ++ का फाइंड / रिप्लेस फीचर इस आवश्यकता को काफी अच्छी तरह से हैंडल करता है। बस बदलें संवाद (CTRL + H) लाएं, विस्तारित खोज मोड (ALT + X) का चयन करें, "\ n \" के लिए खोजें और "\ n" से बदलें:
  2. सभी को बदलें (ALT + A)

Docker की छवि को फिर से बनाना और चलाना आपकी समस्या का समाधान करना चाहिए।


3

एक समान त्रुटि नोट करें जैसे:

standard_init_linux.go:211: exec user process caused "no such file or directory"

ऐसा हो सकता है कि अगर आपके द्वारा बनाई गई वास्तुकला आपके सिस्टम में से किसी एक से मेल नहीं खाती है। उदाहरण के लिए, मशीन arm64पर निर्मित छवि को चलाने की कोशिश करने x86_64से यह त्रुटि उत्पन्न हो सकती है।


1
लिखने के लिए धन्यवाद। यह मुझे एहसास हुआ कि मैं ubuntu के साथ निर्माण कर रहा था और अल्पाइन और अल्पाइन के साथ चल रहा था संभवतः कुछ याद कर रहा था।
किप


0

मैं इस समस्या को हल करता हूं अपनी सेटिंग्स को vscode में सेट करता हूं।

  1. फ़ाइल
    1. पसंद
      1. समायोजन
        1. पाठ संपादक
          1. फ़ाइलें
          2. Eol - \ n पर सेट है

सादर


0

मैं किसी खास बढ़त मामले में जहां मैं उपयोग कर रहा था पाया tini init एक में अल्पाइन कंटेनर, लेकिन जब से मैं स्थिर जुड़ा हुआ संस्करण का उपयोग नहीं किया गया था, और अल्पाइन का उपयोग करता है के बजाय जीएनयू libc पुस्तकालय libc musl डिफ़ॉल्ट रूप से स्थापित है, यह बहुत ही के साथ दुर्घटनाग्रस्त हो गया था त्रुटि संदेश।

अगर मैं यह समझ गया होता और दस्तावेज़ीकरण को ठीक से पढ़ने के लिए भी समय निकाल लेता , तो मुझे तिनी स्टेटिक मिल जाता , जिसे बदलने पर, मेरी समस्या का समाधान हो जाता।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.