2015-02-13 8 views
8

Ho installato l'immagine mobile e creato un'immagine con successo.Avvio di un servizio nel contenitore finestra mobile non riuscito, con errore: Impossibile ottenere la connessione D-Bus: Nessuna connessione al gestore servizi

Quando SSH al contenitore ed eseguire il comando service xxx start, un errore spuntato:

service nginfra start

Redirecting to /bin/systemctl start nginfra.service /sbin/service: line 79: /bin/systemctl: No such file or directory

realtà, fakesystemd è installato nel contenitore anziché systemd.

Così ho rimosso fakesystemd e installato systemd con il comando: yum di swap - rimuovere fakesystemd - installare systemd systemd-libs

Ma io ancora non può avviare il servizio:

service nginfra start

Redirecting to /bin/systemctl start nginfra.service Failed to get D-Bus connection: No connection to service manager.

Qualcuno ha mai incontrato e risolto questo problema?

+0

Si prega di imparare come formattare i post per renderlo leggibile per gli altri. – arogachev

+0

Se condividi il tuo Dockerfile, potrebbe essere più facile per gli altri aiutare – ibotty

risposta

4

Questo è known issue con i sistemi operativi basati su systemd all'interno dei contenitori Docker.

Risposta breve: così come la sostituzione fakesystemd con systemd è necessario collegare /sys/fs/cgroup come volume di sola lettura nel contenitore, costruire l'immagine e quindi eseguirlo in modalità "privilegiato".

Questo è the best guide I've found for this. Usa Centos come esempio, ma dovrebbe funzionare con qualsiasi SO basato su systemd.

+0

Quindi, se stai usando Docker su Mac o Windows, allora sei praticamente avvitato ??? :( –

+0

@jerseybean No, questo problema riguarda il sistema operativo in esecuzione all'interno del contenitore Docker, non con il tipo di host su cui è in esecuzione il contenitore. – ocean

5

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.

+0

Da https://github.com/docker/docker/issues/7459#issuecomment-283888347, informazioni preziose. Leggendo la Guida e provando con centos7 e Dockerfile, lo stesso errore non è andato via. Sembra che il mio docker versione 1.12 sia troppo vecchio, ho rinunciato e fallback a "run --privillaged". – kaorukobo

+0

Non so perché, ma sembra che non funzioni ancora nel mio caso - vedi https://github.com/moby/moby/issues/7459#issuecomment-341907198 'Impossibile ottenere la connessione D-Bus: operazione non consentita' e un '[!!!!!!] Impossibile montare i filesystem dell'API, congelamento – loretoparisi

Problemi correlati