web-dev-qa-db-fra.com

Que se passe-t-il lorsque le plugin Docker-Maven tente de construire une image?

J'exécute Jenkins dans un conteneur de menu fixe et Jenkins essaie d'exécuter mon build maven. Dans le cadre de la construction, le plug-in docker maven lui demande de créer une image de docker.

Cette partie du POM est ci-dessous.

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

La construction maven s'exécute jusqu'à ce qu'elle tente de générer l'image. Le message d'erreur suivant est alors craché:

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

Je peux aller dans le bon répertoire et le fichier Docker est là.

Je peux aussi exécuter Sudo docker build . et il construira l'image sans aucun problème.

Pourquoi la construction Maven échoue? Quelle demande est faite à localhost: 80? Comment puis-je corriger cela afin que maven puisse construire mon image?

Note: J'ai monté le socket docker et le binaire dans ce conteneur

15
kevin

Comme mentionné ci-dessus par Rajith Delantha, cela a résolu le problème pour moi:

Ajoutez: DOCKER_OPTS=' -G jenkins' directement dans /etc/default/docker.

Puis redémarrez le service Docker avec Sudo service docker restart.

3
Aaron Zhao

Cela peut être résolu en ajoutant la variable d'environnement DOCKER_Host dans Jenkins.

Configurez votre démon docker comme ceci:

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

Travaux Jenkins (variables d'environnement d'injection):

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

J'ai eu le même problème, mais dans ma machine locale.

Je l'ai eu après avoir lu ce commentaire dans le fil de discussion Github: https://github.com/docker/compose/issues/1214#issuecomment-256774629

Ça dit:

Solution (à partir de https://docs.docker.com/engine/installation/linux/debian/ , ne fonctionne pas uniquement avec Debian):

Ajoutez le groupe de menus fixe s'il n'existe pas déjà.

Sudo groupadd docker

Ajoutez l'utilisateur connecté "$ {USER}" au groupe de menus fixes. Changez le nom d'utilisateur pour correspondre à votre utilisateur préféré. Vous devrez peut-être vous déconnecter et vous reconnecter pour que cela prenne effet.

Sudo gpasswd -a ${USER} docker

Redémarrez le démon Docker.

Sudo service docker restart

1
leonardoborges

J'ai eu un problème similaire alors que je n'avais pas le démon docker en cours d'exécution - redémarrez la boîte à outils Docker et cela semble beaucoup plus heureux maintenant.

0
James B

après m'être assuré que docker ps fonctionnait avec le même utilisateur que mvn, j'avais toujours le même problème. cela ressemble à un bug dû à des caractères spéciaux dans le nom de l'image. Je l'ai résolu en supprimant le signe de tiret (-) (ou tout caractère spécial) du nom de l'image du menu fixe.

essayez de définir le référentiel sur un nom différent et vérifiez.

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

J'ai rencontré le problème chez bamboo-agent, mais je suppose que la même chose vaut pour les jenkins.

Ajoutez l'utilisateur exécutant maven au groupe de menus. Ensuite, redémarrez docker ET le service qui exécute maven. Les modifications de groupe ne sont pas chargées pendant l'exécution des services. Donc dans mon cas:

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

J'ai pu résoudre le problème en combinant des éléments des deux réponses votées.

Définissez les options pour utiliser un port différent dans /etc/default/docker.

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

Redémarrez le démon Docker.

Sudo service docker restart

Ensuite, construisez votre paquet.

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