2016-04-11 14 views
6

पर एक वैकल्पिक टेलिनेट कार्यान्वयन नहीं मिला" मैं एक मैक उपयोगकर्ता हूं और एक वीएम "उबंटू 14.04" के अंदर स्थापित डॉकर हूं। (मैं मैन्युअल रूप से सब कुछ स्थापित है, नहीं डोकर टूलबॉक्स का प्रयोग करके)डॉकर "

समस्या है जब मैं विशिष्ट कंटेनर शुरू (अन्य कंटेनरों सामान्य रूप से चलते हैं), यह मुझे इस अजीब त्रुटि संदेश देता है "एक वैकल्पिक telinit नहीं मिल सका स्पॉन करने के लिए कार्यान्वयन "।

यहाँ Dockerfile मैं छवि का निर्माण करने के लिए इस्तेमाल होता है:

FROM diegomarangoni/hhvm:cli 

# install php composer. 
# It needs git and the PHP zip extension 
# zlib1g-dev is needed to compile the PHP zip extension 
# openssh-client provides ssh-keyscan 
RUN apt-get update \ 
    && apt-get install --assume-yes --no-install-recommends curl git zlib1g-dev openssh-client \ 
    && apt-get clean && rm -r /var/lib/apt/lists/* \ 
    && curl -sS https://getcomposer.org/installer -o installer \ 
    && hhvm -v ResourceLimit.SocketDefaultTimeout=30 -v Http.SlowQueryThreshold=30000 installer \ 
    && mv composer.phar /usr/local/bin/composer \ 
    && rm installer 

WORKDIR /home/assert/scripts 

COPY scripts/composer.json /home/assert/ 
COPY scripts /home/assert/scripts 

RUN hhvm -v ResourceLimit.SocketDefaultTimeout=30 -v Http.SlowQueryThreshold=30000 -v Eval.Jit=false \ 
    /usr/local/bin/composer install 

# Run the assert container web server 
CMD ["hhvm", "-v", "Eval.Jit=false", "/home/assert/scripts/vendor/bin/phpunit", "/home/assert/scripts/tests", "--configuration", "/home/assert/scripts/tests/phpunit.xml"] 

# keep it running 
CMD /sbin/init 

और मैं आदेश का उपयोग कर इसे शुरू:

docker run <CONTAINER> 

अग्रिम धन्यवाद,

उत्तर

4

इसके कुछ कारण हो सकता है यहां अपने संस्करणों के आधार पर। क्या आपने दान वॉल्श की पुरानी पोस्ट की कोशिश की है? http://developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/

पुराने संस्करणों में यह संभावना दो आवश्यकताओं की वजह से डोकर करने के लिए systemd की जरूरत है:

  1. --privileged
  2. साथ चलाने की आवश्यकता है मात्रा/sys/FS शामिल करने के लिए की आवश्यकता है/cgroup

आप strace हैं, तो आप पा सकते हैं:

ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
lstat("/run/systemd/system/", 0x7fffa5b4e300) = -1 ENOENT (No such file or directory) 
execve("/lib/sysvinit/telinit", ["/usr/sbin/init"], [/* 8 vars */]) = -1 ENOENT (No such file or directory) 
writev(2, [{"Couldn't find an alternative tel"..., 61}, {"\n", 1}], 2Couldn't find an alternative telinit implementation to spawn. 
) = 62 
exit_group(1)       = ? 
+++ exited with 1 +++ 

नोट वें लाइन "इनिट" और "टेलिनिट" के साथ कहीं भी सामान्य सिम्लिंक बन गया जो निराशाजनक है। इससे भी ज्यादा भ्रमित, यह एक Red Hat- आधारित distro (CentOS) है जिसका विरासत फ़ॉलबैक अपस्टार्ट होना चाहिए, सिस्टमवी नहीं। किसी भी मामले में, यह केवल यह कहने में मददगार है कि यह क्या है: व्यवस्थित बाइनरी का उपयोग सीधे करें, नहीं/usr/sbin/init उम्मीद है कि यह systemd बाइनरी के लिए एक सिम्लिंक है।

आधुनिक संस्करणों में मैंने चीजों को सही करने के लिए सिम्लिंक के साथ खेलने का प्रयास किया है लेकिन जाने का सबसे अच्छा तरीका वास्तव में रन कमांड को थोड़ा सा बदल रहा है।

docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro [image] /bin/bash 

एक बार जब आप कर रहे हैं कि अब तक यह पूरी तरह सीधे systemd चला करने के लिए ठीक है:

Name  : systemd 
Arch  : x86_64 
Version  : 219 
Release  : 19.el7_2.12 
Size  : 5.1 M 

आशा इस मदद करता है:

/usr/lib/systemd/systemd --system --unit=basic.target 

यह मैं इसे कैसे नीचे systemd संस्करण के साथ देखते हैं। वहां पुराने पुराने दस्तावेज़ और व्यवस्थित चश्मा बदल रहे हैं। जॉनीबी

+0

मैंने ब्लॉकपोस्ट में उल्लिखित डॉकरफ़ाइल का उपयोग किया (हालांकि एक और सेंटोस 7 बेस छवि के साथ) और रन कमांड का उपयोग किया। हालांकि, जब 'डॉकर रन -टी-वी/सीएस/एफएस/सीग्रुप:/sys/fs/cgroup: ro [myimage]/bin/bash' चलाते समय, मुझे मिलता है' cgroup माउंट पॉइंट नहीं मिल रहा है: ऑपरेशन की अनुमति नहीं है विफल प्रबंधक ऑब्जेक्ट आवंटित करें: ऑपरेशन की अनुमति नहीं है ' – jaw