Docker REST API 未绑定到 Jenkins 的端口

Docker REST API is not binding on port for Jenkins

我正在使用: docker 版本:1.11.1,构建 5604cbe。我在 /etc/default/docker 中进行了如下设置,为 jenkins 用户组配置 docker 的 REST API :

    # Use DOCKER_OPTS to modify the daemon startup options.
    #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

    DOCKER_OPTS="G- jenkins -H unix://var/run/docker.sock -H tcp://0.0.0.0:9090"

    export DOCKER_HOST="tcp://0.0.0.0:9090"

ps- 我也试过 127.0.0.1

然后我做了sudo service docker restart

命令$ ps aux|grep docker返回:

root     12385  0.0  0.2 421840 36016 ?        Ssl  19:21   0:00 /usr/bin/docker daemon -H fd://
root     12391  0.0  0.0 294652 12188 ?        Ssl  19:21   0:00 docker-containerd -l /var/run/docker/libcontainerd/docker-containerd.sock --runtime docker-runc
root     12654  0.0  0.0  21296  1028 pts/1    S+   19:28   0:00 grep --color=auto docker

似乎 REST API 没有绑定到 port:9090.

然后我使用 Jenkins Docker 构建步骤插件 连接 docker REST API。它 returns 以下 :


Building in workspace /var/lib/jenkins/jobs/Telco_automated_build/workspace
[Docker] INFO: Pulling image registry.hub.docker.com/pratyush/product:latest
ERROR: Build step failed with exception
javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:9090 [/127.0.0.1] failed: Connection refused
    at org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:513)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246)
    at org.glassfish.jersey.client.JerseyInvocation.call(JerseyInvocation.java:667)
    at org.glassfish.jersey.client.JerseyInvocation.call(JerseyInvocation.java:664)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:664)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:424)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:333)
    at com.github.dockerjava.jaxrs.PullImageCmdExec.execute(PullImageCmdExec.java:37)
    at com.github.dockerjava.jaxrs.PullImageCmdExec.execute(PullImageCmdExec.java:17)
    at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:57)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:29)
    at com.github.dockerjava.core.command.PullImageCmdImpl.exec(PullImageCmdImpl.java:15)
    at org.jenkinsci.plugins.dockerbuildstep.cmd.PullImageCommand.execute(PullImageCommand.java:75)
    at org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.perform(DockerBuilder.java:75)
    at hudson.tasks.BuildStepMonitor.perform(BuildStepMonitor.java:20)

jenkins 全局设置 当我点击 test-connection 它 returns:

Something went wrong, cannot connect to http://127.0.0.1:9090/, cause: org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:9090 [/127.0.0.1] failed: Connection refused

PS- 我在更改全局设置后重新启动了 Jenkins 服务器

任何帮助,我错过了什么?

Ubuntu 我相信 16.04 现在使用 systemd。在这种情况下,docker daemon 参数未使用 /etc/default/docker 设置。您可以在 $ ps aux|grep docker 的输出中看到它们没有被拾取。

相反,您需要 follow the instructions 在基于 systemd 的设置中设置守护进程参数。