Jenkins在作为docker容器运行时无法访问Internet

时间:2016-09-21 05:14:03

标签: proxy docker jenkins

我正在运行jenkins docker image。在开始时,它抱怨无法访问互联网。

这是我运行它的方式:

docker pull jenkins
mkdir jenkins-shared-volume
docker run -d -p 49001:8080 -p 50000:50000 -v jenkins-shared-volume:/var/jenkins_home -t --name jenkins jenkins

然后jenkins实例在http://localhost:49001上运行。但它有连接问题:

  

离线此Jenkins实例似乎处于脱机状态。

     

有关在没有互联网的情况下安装Jenkins的信息   连接,请参阅脱机Jenkins安装文档。

     

您可以选择继续配置代理或跳过插件   安装。

enter image description here

我的系统中没有代理(家用笔记本电脑)。我想这可能是一个模糊的码头工具问题,但是:

  1. 我找不到任何对此问题的引用
  2. 由于这是人们运行jenkins docker图像的常用方式,我发现这不是开箱即用的,这令人惊讶
  3. 我做错了吗?

    修改

    只是为了确保docker容器确实可以直接访问互联网:

    docker exec -it jenkins /bin/bash
    jenkins@4ef4944a7cb7:/$ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8): 56 data bytes
    64 bytes from 8.8.8.8: icmp_seq=0 ttl=44 time=29.859 ms
    

    EDIT2

    运行连接到host网络的容器可以解决问题并让jenkins访问互联网:

    docker run -d --net host -v jenkins-shared-volume:/var/jenkins_home -t --name jenkins jenkins
    

    但是我无法映射端口:jenkins可以在http://localhost:8080上直接访问,这可能是其他服务使用8080端口时的冲突源。

2 个答案:

答案 0 :(得分:1)

奇怪的是,我昨晚使用詹金斯的官方形象遇到了同样的问题:

 docker run -p 8080:8080 --rm jenkins/jenkins

虽然我还没弄清楚为什么还是如何永久修复它,但我找到了解决方法。

使用较旧的不支持的图像jenkins启动图像...进行初始设置..然后将其关闭,交换图像并启动官方。

这里的参考是我的docker-compose.yml:

version: "2"

services:
  app:
    image: jenkins #after booting and initial setup swap to jenkins/jenkins
    ports:
      - "50000:50000"
      - "8080:8080"
    volumes:
      - home:/var/jenkins_home
volumes:
  home:

答案 1 :(得分:1)

运行“ ping 8.8.8.8”时,您正在测试Internet连接,但未测试DNS解析。

尝试“ ping www.google.com”,我认为您遇到了DNS问题,这就是Jenkins无法访问插件包的原因。

编辑/etc/docker/daemon.json并设置本地DNS服务器,以避免Docker使用默认的Google Public DNS。 Docker Docs - Daemon configuration file