it-swarm.com.de

Was passiert, wenn das Docker-Maven-Plugin versucht, ein Image zu erstellen?

Ich führe Jenkins in einem Docker-Container aus und Jenkins versucht, meinen Maven-Build auszuführen. Als Teil des Builds weist das Docker-Maven-Plugin es an, ein Docker-Image zu erstellen.

Dieser Teil des POM ist unten.

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.3.8</version>
    <configuration>
        <imageName>example</imageName>
        <baseImage>Java:latest</baseImage>
        <skipDockerBuild>false</skipDockerBuild>
        <cmd>["Java", "-jar", "myLogThread-jar-with-dependencies.jar"]</cmd>
        <resources>
            <resource>
                <directory>target/</directory>
                <include>config.properties</include>
            </resource>
            <resource>
                <directory>${project.build.directory}</directory>
                <include>myLogThread-jar-with-dependencies.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

Der Maven-Build wird ausgeführt, bis er versucht, das Image zu erstellen. An diesem Punkt wird die folgende Fehlermeldung ausgegeben:

[INFO] Building image example
[INFO] I/O exception (Java.io.IOException) caught when processing request to {}->unix://localhost:80: Permission denied

Ich kann in das richtige Verzeichnis gehen und das Dockerfile ist da.

Ich kann auch Sudo docker build . ausführen und es wird das Image ohne Probleme erstellen.

Warum schlägt der Build des Maven fehl? Welche Anfrage wird an localhost: 80 gestellt? Wie kann ich das korrigieren, damit Maven mein Image aufbauen kann?

Hinweis: Ich habe den Docker-Socket und die Binärdatei in diesen Container eingehängt

15
kevin

Wie oben von Rajith Delantha erwähnt, löste dies das Problem für mich:

Fügen Sie Folgendes hinzu: DOCKER_OPTS=' -G jenkins' direkt in /etc/default/docker.

Starten Sie dann den Docker-Dienst mit Sudo service docker restart neu.

3
Aaron Zhao

Dies kann durch Hinzufügen der Umgebungsvariablen DOCKER_Host in Jenkins behoben werden.

Richten Sie Ihren Docker-Daemon folgendermaßen ein:

[/etc/sysconfig/docker]
OPTIONS="-H tcp://127.0.0.1:4243"

Jenkins Jobs (Inject Umgebungsvariablen):

DOCKER_Host=tcp://127.0.0.1:4243
2
Aditya Sirna

Ich hatte das gleiche Problem, aber auf meinem lokalen Rechner.

Nachdem ich diesen Kommentar in Github gelesen habe, habe ich ihn erhalten: https://github.com/docker/compose/issues/1214#issuecomment-256774629

Es sagt:

Lösung (von https://docs.docker.com/engine/installation/linux/debian/ , funktioniert nicht nur mit Debian):

Fügen Sie die Andockgruppe hinzu, falls sie noch nicht vorhanden ist.

Sudo groupadd docker

Fügen Sie den verbundenen Benutzer "$ {USER}" zur Docking-Gruppe hinzu. Ändern Sie den Benutzernamen so, dass er Ihrem bevorzugten Benutzer entspricht. Möglicherweise müssen Sie sich abmelden und erneut anmelden, damit dies wirksam wird.

Sudo gpasswd -a ${USER} docker

Starten Sie den Docker-Daemon neu.

Sudo service docker restart

1
leonardoborges

Ich hatte ein ähnliches Problem, als der Docker-Dämon nicht lief - starten Sie die Docker-Toolbox neu und es sieht jetzt viel glücklicher aus

0
James B

nachdem ich sichergestellt habe, dass docker ps von demselben Benutzer ausgeführt wird, der mvn ausführt, hatte ich immer noch das gleiche Problem. Es sieht aus wie ein Fehler aufgrund von Sonderzeichen im Bildnamen. Ich habe das Problem behoben, indem ich das Bindestrichzeichen (-) (oder Sonderzeichen) aus dem Namen des Docker-Image entfernt habe.

versuchen Sie, das Repository auf einen anderen Namen zu setzen, und überprüfen Sie ihn.

            <configuration>
                <repository>somename</repository>                    
            </configuration>
0
Maoz Zadok

Ich habe das Problem bei Bamboo-Agent kennengelernt, aber ich gehe davon aus, dass dies auch bei Jenkins der Fall ist.

Fügen Sie den Benutzer, der den Maven ausführt, der Docker-Gruppe hinzu. Starten Sie dann docker AND the service running maven neu. Gruppenänderungen werden nicht geladen, während die Dienste ausgeführt werden. Also in meinem Fall:

Sudo groupadd docker # if it does not exist
Sudo usermod -a -G docker bamboo-user
Sudo systemctl restart docker.service
Sudo systemctl restart bamboo-agent.service

Ich konnte das Problem lösen, indem ich Elemente der beiden hochgestimmten Antworten kombinierte.

Legen Sie die Optionen für die Verwendung eines anderen Ports in /etc/default/docker fest.

DOCKER_OPTS="-H tcp://127.0.0.1:4243"

Starten Sie den Docker-Daemon neu.

Sudo service docker restart

Dann baue dein Paket.

export DOCKER_Host=tcp://127.0.0.1:4243
mvn clean package docker:build
0
Jose Martinez