在Jenkins上使用Docker插件

14

我正在尝试使用Jenkins上的docker插件来运行现有容器的实例。 Docker版本1.6.0,构建编号4749651。

我选择了“创建容器”,输入了图像ID作为图像名称,并尝试了主机http://172.16.42.43:4243以及一个空主机。 我一直遇到这个错误:

ERROR: Build step failed with exception
java.lang.NullPointerException: uri was not specified
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204)
    at com.github.dockerjava.core.DockerClientConfig$DockerClientConfigBuilder.withUri(DockerClientConfig.java:406)
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.createDockerClient(DockerBuilder.java:123)
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder$DescriptorImpl.getDockerClient(DockerBuilder.java:201)
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:71)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779)
    at hudson.model.Build$BuildExecution.build(Build.java:205)
    at hudson.model.Build$BuildExecution.doRun(Build.java:162)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537)
    at hudson.model.Run.execute(Run.java:1744)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:374)
Build step 'Execute Docker container' marked build as failure

有人能告诉我怎么修复吗? 同时,如果有人之前使用过这个插件,请让我知道它是否曾经有效。

还尝试了"执行Docker容器"->以指定的容器ID启动容器,结果出现相同的错误。

另一种方法: 我尝试使用Execute shell插件,但是出现了这个错误:

+ docker start d023eec1ff34
Post http:///var/run/docker.sock/v1.18/containers/d023eec1ff34/start: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
time="2015-05-05T10:26:34-07:00" level=fatal msg="Error: failed to start one or more containers"

如果我只是进入终端,切换到Jenkins用户并运行docker启动命令,它可以正常工作。 如果有人知道如何以这种方式修复它,那也很好。


docker version?检查Docker的日志(它可能在/var/log/docker.log或/var/log/upstart/docker.log中,这取决于你的操作系统),同时尝试以调试模式启动Docker守护进程,参见--debug=true docs.docker.com/reference/commandline/cli/#daemon。 - user2915097
也许这个问题可以通过给jenkins组授予docker unix套接字权限来解决。可以通过在配置文件中配置docker守护进程启动选项来修改此设置,添加以下行:DOCKER_OPTS=' -G jenkins'在Ubuntu中,/etc/default/docker是docker的配置文件。 - user2915097
我尝试将其添加到Jenkins默认设置中。此外,我还尝试将Jenkins用户添加到Docker组中。我在两台机器上都尝试过了,但没有成功。 - max
是的。我重新启动了Jenkins。同时,我检查了日志。它没有记录任何与Jenkins运行相对应的内容。为什么在使用插件时会抱怨URI呢? - max
你曾经找到解决方法吗? - Eli
2个回答

15
假设Docker正在同一台机器上运行,请确保使用以下命令运行Docker: -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock 然后转到Manage Jenkins > Configuration > Configure System,然后向下滚动到Docker Builder并在Docker server REST url中输入http://localhost:4243 编辑后:我最初告诉Docker监听0.0.0.0,这会绑定所有IP地址,并且如果您的防火墙通过流量,则可能允许来自外部的连接。因此,我将其更新为绑定到环回地址。此外,当前版本的文档建议使用不同的端口,但由于您手动指定端口,因此任何端口都可以。

3
FYI 4243是旧的Docker守护程序端口,最终官方端口变成了2375。 - Alex
2
我强烈建议使用tcp://127.0.0.1而不是0.0.0.0,因为您可能不希望将Docker提供给外部世界。 - Nitek
1
@jonalv 这些是Docker守护进程的参数,而不是Docker命令行工具的参数。https://docs.docker.com/v1.10/engine/reference/commandline/daemon/ - Andrew Curioso
在我的情况下,似乎什么都不起作用 - 当我点击Docker Builder配置中的“测试”按钮时,在Jenkins日志中看到了相同的错误。然后我意识到我需要保存配置,然后再点击测试按钮! - Vish

3
你需要将Jenkins用户添加到docker组中,以便赋予其使用docker的权限,请运行以下命令:
sudo usermod -a -G docker jenkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接