суббота, 28 марта 2020 г.

Проблемы достучаться к локальному докер-реестру на Nexus в docker stack

Диспозиция: докер-стек на Docker Desktop (Windows 10) с jenkins-slave, который хочет сделать docker push собранного образа и не может, сообщения:

Get http://nexus:8083/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

и подобное.
Похоже, проблема из-за того, что (и в случае когда) докер на jenkins-slave работает через монтирование docker.sock хоста (как volume) - в результате докер-операции происходят на хосте, и там неизвестен nexus, который известен как сервис внутри докер-сети.
Лечится прописыванием имени хоста докер-реестра (nexus в этом случае) в %system32%/drivers/etc/hosts хоста DockerDesktopVM (винды, то есть).
nexus, порты которого замапены (уже должны быть) на localhost, после обращения изнутри докер-контейнера дженкинс-слейва является в этом смысле localhost'ом тоже -
точно (проверено) работает при тех же портах, прописанных в мэпинге докер-контейнера nexus:

  nexus:
    image: sonatype/nexus3:3.22.0
    volumes:
      - nexusvolume:/nexus-data
    ports:
      - "8081:8081"
      - "8083:8083"
      - "8082:8082"

(фрагмент docker-compose.yml докер-стека)

То есть, в %system32%/drivers/etc/hosts хостовой винды прописывается:

127.0.0.2 nexus
наверняка, работало бы и 127.0.0.1

Комментариев нет: