【问题标题】:Docker image jenkins/jenkins:lts-alpine DNS issueDocker 映像 jenkins/jenkins:lts-alpine DNS 问题
【发布时间】:2020-06-08 05:13:02
【问题描述】:

我有一个基于 jenkins/jenkins:lts-alpine 的 docker 镜像。由于某种原因,它无法解析 DNS 名称,如下所示:

[root@inf-jenkins02-prd ~]# docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                 NAMES
716ceece2017        myjenkins/jenkins:latest   "/sbin/tini -- /us..."   12 minutes ago      Up 12 minutes       8080/tcp, 50000/tcp   jenkins_main.1.heaupued6g8eygrgrk6c8hlvy
[root@inf-jenkins02-prd ~]# docker exec -ti 716ceece2017 nslookup www.google.com
nslookup: can't resolve '(null)': Name does not resolve

nslookup: can't resolve 'www.google.com': Try again
[root@inf-jenkins02-prd ~]#

但是,按预期运行以下操作:

[root@inf-jenkins02-prd ~]# docker run myjenkins/jenkins:latest nslookup google.com
nslookup: can't resolve '(null)': Name does not resolve

Name:      google.com
Address 1: 216.58.204.142 par21s05-in-f142.1e100.net

这是用于构建映像的 Dockerfile:

FROM jenkins/jenkins:lts-alpine
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false -Dhudson.DNSMultiCast.disabled=true -Dhudson.udp=-1"
USER jenkins
RUN ssh-keygen -q -t rsa -N '' -f /var/jenkins_home/.ssh/id_rsa
COPY security.groovy /usr/share/jenkins/ref/init.groovy.d/security.groovy
COPY xlocation.groovy /usr/share/jenkins/ref/init.groovy.d/xlocation.groovy
COPY znodes.groovy /usr/share/jenkins/ref/init.groovy.d/znodes.groovy
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

这是 docker-compose 文件:

version: "3.1"
services:
  main:
    container_name: jenkins-mine
    image: myjenkins/jenkins
    deploy:
      placement:
        constraints:
          - node.role == manager
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - /home/jenkins:/var/jenkins_home/  
      - /var/run/docker.sock:/var/run/docker.sock

那么,我只是在做:

docker stack deploy -c /.../docker-compose.yml jenkins

一切似乎都还好:

[root@inf-jenkins02-prd ~]# docker service ls
ID            NAME          MODE        REPLICAS  IMAGE
71h4jrygqp7m  jenkins_main  replicated  1/1       myjenkins/jenkins
[root@inf-jenkins02-prd ~]# docker service ps 71h4jrygqp7m
ID            NAME            IMAGE           NODE               DESIRED STATE  CURRENT STATE           ERROR  PORTS
heaupued6g8e  jenkins_main.1  myjenkins/jenkins  inf-jenkins02-prd  Running        Running 23 minutes ago
[root@inf-jenkins02-prd ~]#

但 google.com 无法解决:

[root@inf-jenkins02-prd ~]# docker exec -ti 716ceece2017 nslookup www.google.conf
nslookup: can't resolve '(null)': Name does not resolve

nslookup: can't resolve 'www.google.conf': Try again
[root@inf-jenkins02-prd ~]# docker exec -ti 716ceece2017 cat /etc/resolv.conf
search ...
nameserver 127.0.0.11
options ndots:0
[root@inf-jenkins02-prd ~]#

知道这里发生了什么吗?非常感谢。

亲切的问候,

尼古拉斯

【问题讨论】:

    标签: docker jenkins dns docker-swarm


    【解决方案1】:

    如果您看到消息nslookup: can't resolve '(null)': Name does not resolve,那是因为nslookup 正在查找您要将DNS 查询发送到的服务器的名称。既然你没有提供,那就是null。这是nslookup 中的一个已知问题(请参阅https://github.com/gliderlabs/docker-alpine/issues/476)。另请参阅this SO question 了解更多详情..

    要检查的一件事是您正在查找正确的域。 在这里,您查找的是www.google.conf,而不是www.google.comwww.google.conf 不存在,所以你得到的输出是预期的。

    # docker exec -ti 716ceece2017 nslookup www.google.conf
    nslookup: can't resolve '(null)': Name does not resolve
    
    nslookup: can't resolve 'www.google.conf': Try again
    

    要检查的另一件事是使用不同的 DNS 解析器尝试 nslookup。 例如:

    docker exec -ti 716ceece2017 nslookup www.google.conf 8.8.8.8
    

    然后您可以查看问题是 Internet 还是 DNS 服务器。

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 2017-11-30
      • 2019-04-02
      • 2022-06-27
      • 2018-06-24
      • 2017-07-05
      • 2021-11-07
      • 2019-12-17
      • 2021-12-11
      相关资源
      最近更新 更多