मैं इस मुद्दे को एक CentOS: 7 डॉकटर कंटेनर में ठीक करने में कामयाब रहा हूं। मैंने मुख्य रूप से CentOS Docker इमेज प्रोजेक्ट पर गाइड का अनुसरण किया है ।
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
# Install anything. The service you want to start must be a SystemD service.
CMD ["/usr/sbin/init"]
अब, छवि बनाएं और इसे कम से कम निम्नलिखित तर्कों का उपयोग करके docker runकमांड के लिए चलाएं :-v /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro
फिर मुख्य बिंदु यह है कि /usr/sbin/initडॉकर कंटेनर के अंदर पहली प्रक्रिया होनी चाहिए।
इसलिए यदि आप एक कस्टम स्क्रिप्ट का उपयोग करना चाहते हैं /usr/sbin/init, जो चलने से पहले कुछ कमांड्स को निष्पादित करता है , तो इसे अपनी स्क्रिप्ट के अंत में लॉन्च करें exec /usr/sbin/init( उपयोग कर एक स्क्रिप्ट में)।
यहाँ एक उदाहरण है:
ADD cmd.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/cmd.sh
CMD ["/usr/local/bin/cmd.sh"]
और यहाँ की सामग्री है cmd.sh:
#!/bin/bash
# Do some stuffs
exec /usr/sbin/init # To correctly start D-Bus thanks to https://forums.docker.com/t/any-simple-and-safe-way-to-start-services-on-centos7-systemd/5695/8
System is booting up. See pam_nologin(8)यदि आपके पास PAM प्रणाली का उपयोग कर रहे हैं, तो उस स्थिति में, /usr/lib/tmpfiles.d/systemd-nologin.confअपने में हटाएं Dockerfileक्योंकि यह फ़ाइल बनाता है /var/run/nologinजो इस विशिष्ट त्रुटि को उत्पन्न करता है।
sudo?