2017-09-06 2 views
0

Ich versuche ein Docker-Image zu erstellen, das auf centos:systemd basiert. In meinem Dockerfile ich einen Befehl laufen lasse, die auf systemd Lauf abhängt, versagt diese mit dem folgenden Fehler:docker bauen wie man intermediate container mit centos läuft: systemd

Failed to get D-Bus connection: Operation not permitted 
error: %pre(mod-php-7.1-apache2-zend-server-7.1.7-16.x86_64) scriptlet failed, exit status 1 
Error in PREIN scriptlet in rpm package mod-php-7.1-apache2-zend-server-7.1.7-16.x86_64 

wie kann ich die Zwischenbehälter mit --privileged und Mapping -v /sys/fs/cgroup:/sys/fs/cgroup:ro laufen?

Wenn ich das Installationsprogramm auskommentieren und nur den Container ausführen und das Installationsprogramm manuell ausführen, funktioniert es einwandfrei.

Hier ist die Dockerfile

FROM centos/systemd 
COPY ./ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz /opt 
RUN tar -xvf /opt/ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz -C /opt/ 
RUN /opt/ZendServer-RepositoryInstaller-linux/install_zs.sh 7.1 java --automatic 

Antwort

0

Wenn Ihr Installateur systemd Laufen muss, ich glaube, Sie müssen einen Behälter mit der Basis centos/systemd Bild starten, manuell die Befehle auszuführen, und dann speichern Sie das Ergebnis docker commit verwenden. Das Basis-Image ENTRYPOINT und CMD werden nicht ausgeführt, während untergeordnete Images erstellt werden. Sie werden jedoch ausgeführt, wenn Sie einen Container starten und Ihre Änderungen vornehmen. Nachdem Sie das Installationsprogramm manuell ausgeführt haben, führen Sie docker commit {my_intermediate_container} {my_image}:{my_version} aus und ersetzen Sie die Bits in geschweiften Klammern durch den Containernamen/-Hash, den gewünschten Image-Namen und die Image-Version.

Sie können Ihre Dockerfile möglicherweise auch so ändern, dass init gestartet wird, bevor Sie Ihr Installationsprogramm ausführen. Ich bin nicht sicher, ob das funktionieren wird hier im Rahmen eines Bildes bauen, aber das würde wie folgt aussehen:

FROM centos/systemd 
COPY ./ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz /opt 
RUN tar -xvf /opt/ZendServer-9.1.0-RepositoryInstaller-linux.tar.gz -C /opt/ \ 
    && /usr/sbin/init \ 
    && /opt/ZendServer-RepositoryInstaller-linux/install_zs.sh 7.1 java --automatic 
+0

Danke @wmorrell wird das jetzt versuchen, vergaß es manuell zu übergeben, könnte eine gute Problemumgehung sein, bis ich herausfinden kann, wie man es automatisiert. –

+0

bummer gleichen D-Bus-Fehler beim Versuch, init manuell zu starten –

0

A LAMP-Stack in einem Docker Behälter nicht systemd brauchen - ich gemacht habe mit der docker-systemctl-replacement script zu arbeiten . Es ist in der Lage, einen Dienst entsprechend den Angaben in der Datei * .service zu starten und zu stoppen. Du könntest es mit dem versuchen, was der ZendServer normalerweise außerhalb eines Andock-Containers macht.

Verwandte Themen