Sono riuscito a risolvere questo problema in un contenitore DockOS di CentOS: 7. Ho seguito principalmente the Guide on CentOS Docker image project.
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"]
Ora, costruire l'immagine, ed eseguirlo utilizzando almeno i seguenti argomenti docker run
comando: -v /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro
punto Allora principale è che /usr/sbin/init
deve essere il primo processo all'interno del contenitore finestra mobile.
Quindi, se si desidera utilizzare uno script personalizzato che esegue alcuni comandi prima di eseguire /usr/sbin/init
, avviarlo alla fine dello script utilizzando exec /usr/sbin/init
(in uno script bash).
Ecco un esempio:
ADD cmd.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/cmd.sh
CMD ["/usr/local/bin/cmd.sh"]
E qui è il contenuto di 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
Si potrebbe avere System is booting up. See pam_nologin(8)
Se la vostra utilizzando il sistema PAM, in questo caso, eliminare /usr/lib/tmpfiles.d/systemd-nologin.conf
nella vostra Dockerfile
perché crea il file /var/run/nologin
che genera questo errore specifico.
fonte
2017-03-01 14:25:21
Si prega di imparare come formattare i post per renderlo leggibile per gli altri. – arogachev
Se condividi il tuo Dockerfile, potrebbe essere più facile per gli altri aiutare – ibotty