Jenkins无法使用Docker插件启动Docker从节点。

4

我正在使用 Jenkins Docker 插件在 Docker 主机上动态启动代理。Jenkins master 运行在同一主机上。构建时,它会在 docker-host 上选择一个随机端口并无法连接到该端口。它会启动 Docker 容器。以下是日志。没有更多信息。如何调试这个问题?

INFO: Started container ID 54fe5780ca820a6e2b7cae40610cfc3229dbf889b0c66d6e34a39b74e13aaec7 for node slave-0000w16w841rc from image: jenkinsubuntu
Feb 28, 2019 9:35:54 PM com.nirima.jenkins.plugins.docker.utils.PortUtils$ConnectionCheckSSH execute
INFO: SSH port is open on 127.0.0.1:10007
[02/28/19 21:35:54] SSH Launch of slave-0000w16w841rc on 127.0.0.1 failed in 29 ms 
Feb 28, 2019 9:36:03 PM hudson.slaves.NodeProvisioner$2 run
INFO: Image of jenkinsubuntu provisioning successfully completed. We have now 7 computer(s) `

你能从Jenkins主机连接到Docker主机吗?看起来可能有两个问题。要么是与Docker主机的连接,要么是Jenkins与Docker主机的身份验证。这已经验证了吗? - ygbgames
@ygbgames 我很确定它可以访问Docker主机。但就像你所说的,与Docker主机进行身份验证?我们正在谈论哪种身份验证? - Uppi
如果正在尝试SSH,则应使用基于SSH密钥的身份验证。 - ygbgames
你能展示一下“jenkinsubuntu”镜像的定义吗?另外,你使用的Jenkins版本是什么? - Andreas Lorenzen
2个回答

6

没有找到答案,但最终选择了在Docker插件的Docker模板中使用附加Docker容器连接方法,从而使其工作。


2
虽然您已经提供了其他方法,但是在这里,我们将告诉您应该如何处理和注意事项,因为您询问如何调试问题。
  • 您需要一个包含SSHD的镜像,而插件文档建议使用jenkins/ssh-slave作为自定义镜像的基础。
  • 根据您提供的日志,似乎您正在使用名为jenkinsubuntu的自定义镜像,假设该镜像基于jenkins/ssh-slave,则需要确保您没有覆盖原始entrypoint,如文档中所述:
  • 避免覆盖docker命令,因为SSH Launcher依赖于它。

    您可以使用Entrypoint在构建代理容器内运行一些辅助服务,然后在代理运行时建立连接。只需确保您的entrypoint最终运行传递的命令:

    exec "$@"

  • 最后,请确保进行ssh的主机包含与注入容器中的公钥匹配的私钥。

    如果前两点已经处理好了,那么在此处是调试ssh问题时应该执行的操作。

    • 您可以尝试在运行时使用ssh登录到同一个容器。
    • 如果前一步成功,则可以使用docker logs或通过检查/var/log来检查日志,注意您可能需要将/etc/ssh/sshd_config下的LogLevel更改为VERBOSE以使所有ssh登录尝试的详细信息保存在/var/log/auth.log文件中,从而可以确定问题所在。

最初的回答:虽然您已经提供了其他方法,但是在这里,我们将告诉您应该如何处理和注意事项,因为您询问如何调试问题。

谢谢Mostafa。我基于ssh-slave镜像创建了当前的镜像。我会尝试改变日志级别并观察它告诉我的信息。 - Uppi
@Uppi 你是在尝试使用 root 用户登录吗? - Mostafa Hussein
不是,用户是Jenkins。 - Uppi
你改变了日志级别了吗? - Mostafa Hussein

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