Docker время ожидания соединения nuget - PullRequest
2 голосов
/ 15 января 2020

Попытка использовать официальное изображение jetbrains\teamcity-agent на Kubernetes. Мне удалось запустить Docker в Docker, но я пытался создать ASP. NET образ ядра с командой docker build, с ошибкой dotnet restore с

HTTP истекло время ожидания запроса «GET https://api.nuget.org/v3/index.json» после 100000 мс.

Когда я подключаюсь к самому модулю и пытаюсь curl с URL-адресом, он очень быстрый. Поэтому я предполагаю, что сеть не является проблемой. Спасибо за любой совет.

Обновление

Попытка выполнить простой шаг dotnet restore из контейнера сработал. Но не изнутри docker build.

Обновление 2

Я выделил проблему, это не имеет ничего общего ни с nuget, ни с TeamCity. Связана ли сеть с хостом Kubernetes.

Работает просто docker build с этим Dockerfile :

FROM praqma/network-multitool AS build
RUN route
RUN ping -c 4 google.com

производит вывод:

Step 1/3 : FROM praqma/network-multitool AS build
 ---> 3619cb81e582
Step 2/3 : RUN route
 ---> Running in 80bda13a9860
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 eth0
Removing intermediate container 80bda13a9860
 ---> d79e864eafaf
Step 3/3 : RUN ping -c 4 google.com
 ---> Running in 76354a92a413
PING google.com (216.58.201.110) 56(84) bytes of data.

--- google.com ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 53ms

Стручки, организованные Kubernetes, могут получить доступ к inte rnet в обычном режиме. Я использую Калико в качестве сетевого слоя.

Ответы [ 5 ]

1 голос
/ 01 февраля 2020

У меня была похожая проблема. Ошибка, которую я сделал, не указала точную версию do tnet на изображении docker.

FROM mcr.microsoft.com/dotnet/core/sdk AS build

Мои цели проекта делают tnet 2.2. Чего я не знал, так это того, что это был последний пакет do tnet SDK 3.1. Поэтому, когда выполнялось восстановление do tnet, наступало время ожидания.

Вот что я сделал.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build

Мне пришлось указать конкретную c версию. Я не уверен, имеет ли это отношение к вашей проблеме, но я надеюсь, что это направит вас в правильном направлении. Всегда будьте явными с версией изображения.

1 голос
/ 20 января 2020

У меня точно такое же поведение: у меня есть решение с несколькими зависимостями nuget, которые оно создает без каких-либо проблем на локальной машине. сборка без проблем на windows агенте сборки сборка без проблем на docker хост-машине, но затем я пытаюсь собрать его в агенте сборки в docker - у меня много сообщений, таких как:

Failed to download package 'System.Threading.4.0.11' from 'https://api.nuget.org/v3-flatcontainer/system.threading/4.0.11/system.threading.4.0.11.nupkg'.
  The download of 'https://api.nuget.org/v3-flatcontainer/system.threading/4.0.11/system.threading.4.0.11.nupkg' timed out because no data was received for 60000ms

Я могу пинговать и свернуть страницу из nuget.org, как правило, из контейнера docker.

, так что я думаю, что это особый случай. Я нашел некоторую информацию о MTU, но я не проверял это.

ОБНОВЛЕНИЕ Первоначальная проблема может быть связана с k8s - мой контейнер работает в кластере k8s на основе Ubuntu 18.04 с фланелевым анг k8s v1.16 на моей локальной машине (на основе win) все работает без каких-либо проблема ... но это странно, потому что у меня есть много служб, которые работают в этом кластере без каких-либо проблем! (такая гавань, Graylog, Jaeger et c)

ОБНОВЛЕНИЕ 2 Хорошо, теперь я могу понять все, что угодно. я пытаюсь выполнить

curl https://api.nuget.org/v3/index.json 

и могу получить содержимое файла без ошибок

после этого я пытаюсь запустить

wget https://api.nuget.org/v3-flatcontainer/system.threading/4.0.11/system.threading.4.0.11.nupkg

и пакет успешно загружен

но после запуска do tnet restore я все еще получаю ошибки с таймаутом

ОБНОВЛЕНИЕ 3 Я пытаюсь воспроизвести проблему не в кластере k8s, а в docker локально я запускаю контейнер

docker run -it -v d:/project/test:/mnt/proj teamcity-agent-core3.1 bash

teamcity-buildagent-core3.1 - мой образ на основе jetbrains / teamcity-agent, который содержит. net core 3.1 sdk.

и затем выполнить команда внутри интерактивного сеанса:

dotnet restore test.sln

с ошибкой со следующими сообщениями:

Failed to download package 'System.Runtime.InteropServices.4.3.0' from 'https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg'.
   Received an unexpected EOF or 0 bytes from the transport stream.
  The download of 'https://api.nuget.org/v3-flatcontainer/system.text.encoding.extensions/4.3.0/system.text.encoding.extensions.4.3.0.nupkg' timed out because no data was received for 60000ms.
    Exception of type 'System.TimeoutException' was thrown.
0 голосов
/ 04 апреля 2020

Я исправляю эту проблему, передавая аргумент --disable-parallel для команды restore, которая запрещает восстановление нескольких проектов параллельно.

RUN do tnet restore --disable-parallel

0 голосов
/ 12 февраля 2020

Проверьте настройки DNS (запись A). Попробуйте набрать nslookup yourfeeddomain. Убедитесь, что IP-адрес один и разрешен.

0 голосов
/ 06 февраля 2020

У меня была похожая проблема @NIMROD MAINA и @Anatoly Kryzhanovsky, когда я использовал сборку в docker контейнере из gitlab-runner (docker).

Когда я запускаю dotnet restore за пределами docker контейнер. Все это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...