无法从 Jenkins 构建的 Docker 环境内访问自己的主机 URL

无法从 Jenkins 构建的 Docker 环境内访问自己的主机 URL

我正在将 Jenkins 作为 Docker 镜像运行(https://hub.docker.com/_/jenkins)从内部,我运行一个 node-12 docker 镜像作为构建容器。

我正在运行一个脚本,将新版本发布到我们本地的应用商店,该脚本在同一个 VServer 上运行。

所以现在我遇到的现象是,我无法 curl 到服务器自己的 URL。bash 脚本在我的本地计算机、VServers shell 以及其他容器 shell 中都可以完美运行。

现在出现了最奇怪的事实:我总是超时!

这并不是“无法解决”或类似的情况。

注意:ips 和 domains 替换为 , ips 替换为 Curl 命令

/ $ curl https://<my-domain> 
curl: (7) Failed to connect to <my-domain> port 443: Operation timed out 
/ $ curl https://example.domain
curl: (6) Could not resolve host: example.domain
/ $ curl -IL https://google.de 
HTTP/2 301  

NodeJS 客户端错误

(node:90) UnhandledPromiseRejectionWarning: Error: connect ETIMEDOUT <my-ip>:443

    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)

而谷歌或其他网站则没有问题。这只是自己的主机 URL。

我发现当从 jenkins shell 运行时(docker exec -it jenkins bash),我也无法 ping/curl/whatever

感谢您对修复此问题的任何建议。

// 编辑

这是 docker-compose 配置。我使用 traefik 作为反向代理。

  jenkins:
    image: jenkinsci/blueocean
    container_name: jenkins
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - jenkins_data:/var/jenkins_home
    labels:
      - "traefik.port=8080"
      - "traefik.frontend.rule=Host:ci.domain.example"
      - "traefik.frontend.passHostHeader=true"

jenkins 使用 tini 初始化(https://github.com/krallin/tini

            "Entrypoint": [
                "/sbin/tini",
                "--",
                "/usr/local/bin/jenkins.sh"
            ],

我将检查 tini 是否充当该过程的防火墙。

如果我docker exec以 root 身份进入容器,我甚至可以 ping IP,但仍然无法 curl。

bash-4.4# ping <my-domain>
PING <my-domain> (<my-ip>): 56 data bytes 
64 bytes from <my-ip>: seq=0 ttl=64 time=0.085 ms    

// 编辑 2

我相信问题已经从 maven 开始,jenkins 图像基于:

https://github.com/jenkinsci/jenkins/blob/master/Dockerfile

当我使用 maven 创建一个新的 docker 容器时,我得到了与上面描述完全相同的行为。

// 编辑 3

我在容器 maven 中得到了相同的行为,并且在 openjdk 中更深一层得到了相同的行为。 docker run -it openjdk:8-jdk使用 curl 来获取自己的主机名也会导致相同的行为。

再说一遍:我在 debian/ubuntu 上运行的任何其他容器中都没有遇到这种情况。

// 编辑 4

无法从其他虚拟服务器复制。只有这一个虚拟服务器受到影响。

相关内容