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
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.
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
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
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
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>
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