Docker изображение jenkins / jenkins: проблема lts-alpine DNS - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть docker изображение, основанное на jenkins / jenkins: lts-alpine. По какой-то причине он не может разрешить 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 -компонентный файл:

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 ~]#

Есть идеи о том, что здесь происходит? Большое спасибо заранее.

С уважением,

Николас

1 Ответ

0 голосов
/ 01 марта 2020

Если вы когда-нибудь увидите сообщение nslookup: can't resolve '(null)': Name does not resolve, это потому, что nslookup ищет имя сервера, на который вы собираетесь отправить запрос DNS. Так как вы не предоставили один, это null. Это известная проблема в nslookup (см. https://github.com/gliderlabs/docker-alpine/issues/476). См. Также этот вопрос SO для получения более подробной информации.

Необходимо проверить, что вы ищете нужный домен. Здесь вы посмотрели вверх www.google.conf, а не www.google.com. www.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

Еще одна вещь, которую нужно проверить, - это попробовать nslookup с другим преобразователем DNS. Например:

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

Затем вы можете увидеть, является ли проблема Inte rnet или DNS-сервером.

...