当docker-maven插件尝试构建映像时会发生什么?

时间:2016-01-12 16:15:16

标签: maven plugins jenkins permissions docker

我在Docker容器中运行Jenkins,Jenkins尝试运行我的maven构建。作为构建的一部分,docker maven插件指示它构建一个docker镜像。

POM的那部分在下面。

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

maven构建一直运行,直到它尝试构建映像,此时出现以下错误消息:

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

我可以进入正确的目录,Dockerfile就在那里。

我也可以运行sudo docker build .,它会构建没有问题的图像。

为什么maven构建失败?对localhost有什么要求:80?我怎样才能纠正这个问题,以便maven可以建立我的形象?

注意:我已将docker socket和binary安装在此容器中

7 个答案:

答案 0 :(得分:3)

如上所述Rajith Delantha,这解决了我的问题:

直接在DOCKER_OPTS=' -G jenkins'添加/etc/default/docker

然后按sudo service docker restart重启泊坞服务。

答案 1 :(得分:2)

这可以通过在Jenkins中添加DOCKER_HOST环境变量来解决。

像这样设置你的docker守护进程:

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

Jenkins Jobs(注入环境变量):

DOCKER_HOST=tcp://127.0.0.1:4243

答案 2 :(得分:1)

我遇到了同样的问题,但是在我的本地机器上。

我在Github线程中阅读此评论后得到了它:https://github.com/docker/compose/issues/1214#issuecomment-256774629

它说:

  

解决方案(来自   https://docs.docker.com/engine/installation/linux/debian/,不是   只适用于Debian):

     

添加泊坞组(如果它尚未存在)。

     

sudo groupadd docker

     

添加已关联的用户&#34; $ {USER}&#34;到码头工人组。更改用户   名称以匹配您的首选用户。您可能必须注销并重新登录   再次让这个生效。

     

sudo gpasswd -a ${USER} docker

     

重新启动Docker守护程序。

     

sudo service docker restart

答案 3 :(得分:0)

我能够通过结合两个赞成的答案的元素来解决问题。

设置选项以使用/etc/default/docker中的其他端口。

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

重新启动Docker守护程序。

sudo service docker restart

然后构建你的包。

export DOCKER_HOST=tcp://127.0.0.1:4243
mvn clean package docker:build

答案 4 :(得分:0)

我在竹子代理人处遇到了这个问题,但我认为jenkins也是如此。

将运行maven的用户添加到docker组。然后重启docker和运行maven的服务。服务运行时不会加载组更改。所以在我的情况下:

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

答案 5 :(得分:0)

在确保docker ps可以从运行mvn的同一用户那里工作之后,我仍然遇到相同的问题。 由于图片名称中包含特殊字符,因此看起来像个错误。我通过从Docker映像名称中删除破折号(-)(或任何特殊字符)来解决它。

尝试将存储库设置为不同的名称并进行检查。

            <configuration>
                <repository>somename</repository>                    
            </configuration>

答案 6 :(得分:0)

当我没有运行docker守护程序时,我遇到了类似的问题-重新启动Docker工具箱,现在看起来更加快乐