установка pip не удалась при сборке Docker - PullRequest
0 голосов
/ 15 февраля 2019

У меня странная проблема.У меня есть следующее Dockerfile:

FROM openjdk:8-jre-alpine3.8

WORKDIR /app


RUN apk --no-cache add curl bash g++ postgresql-dev python3-dev
COPY requirements.txt /app
RUN pip3 install -r requirements.txt
...

Я собираю его с помощью команды docker build -t mydocker ..Он отлично работает на других компьютерах, но на моем не работает со следующей ошибкой:

Certificate did not match expected hostname:pypi.org. Certificate:{  
   'subject':((('organizationalUnitName',
   'Domain Control Validated'   ),
   ),
   (('commonName',
   '.fireonskull.com'   ),
   )),
   'issuer':((('countryName',
   'US'   ),
   ),
   (('stateOrProvinceName',
   'Arizona'   ),
   ),
   (('localityName',
   'Scottsdale'   ),
   ),
   (('organizationName',
   'GoDaddy.com, Inc.'   ),
   ),
   (('organizationalUnitName',
   'http://certs.godaddy.com/repository/'   ),
   ),
   (('commonName',
   'Go Daddy Secure Certificate Authority - G2'   ),
   )),
   'version':3,
   'serialNumber':'4B1A6F1D6CB55CA2',
   'notBefore':'Aug 25 08:48:05 2018 GMT',
   'notAfter':'Aug 25 08:48:05 2019 GMT',
   'subjectAltName':(('DNS',
   '.fireonskull.com'   ),
   ('DNS',
   'fireonskull.com'   )),
   'OCSP':   ('http://ocsp.godaddy.com/',
   ),
   'caIssuers':   ('http://certificates.godaddy.com/repository/gdig2.crt',
   ),
   'crlDistributionPoints':   ('http://crl.godaddy.com/gdig2s1-860.crl',
   )
}Retrying (Retry(total=4,
connect=None,
read=None,
redirect=None,
status=None)) after connection broken by 'SSLError(CertificateError("hostname 'pypi.org' doesn't match either of '.fireonskull.com',
'fireonskull.com'",),)': /simple/pandas/  
Certificate did not match expected hostname: pypi.org. Certificate: {'subject': ((('organizationalUnitName', 'Domain Control Validated'),), (('commonName', '.fireonskull.com'),)), 'issuer': ((('countryName', 'US'),), (('stateOrProvinceName', 'Arizona'),), (('localityName', 'Scottsdale'),), (('organizationName', 'GoDaddy.com, Inc.'),), (('organizationalUnitName', 'http://certs.godaddy.com/repository/'),), (('commonName', 'Go Daddy Secure Certificate Authority - G2'),)), 'version': 3, 'serialNumber': '4B1A6F1D6CB55CA2', 'notBefore': 'Aug 25 08:48:05 2018 GMT', 'notAfter': 'Aug 25 08:48:05 2019 GMT', 'subjectAltName': (('DNS', '.fireonskull.com'), ('DNS', 'fireonskull.com')), 'OCSP': ('http://ocsp.godaddy.com/',), 'caIssuers': ('http://certificates.godaddy.com/repository/gdig2.crt',), 'crlDistributionPoints': ('http://crl.godaddy.com/gdig2s1-860.crl',)} Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(CertificateError("hostname 'pypi.org' doesn't match either of '.fireonskull.com',
'fireonskull.com'",
),
)':/simple/pandas/

В ошибке упоминается имя fireonskull.com, которое мне знакомо.Когда-то у меня был сертификат SSL для этого домена на моем компьютере.

Но что общего имеет docker build с файлами в моей системе.Также pip install отлично работает на хост-ОС.Пожалуйста, помогите!

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Из того, что я вижу, у вас проблема с проверкой / проверкой SSL.Попробуйте добавить это в шаге установки pip:

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org -r requirements.txt
0 голосов
/ 23 февраля 2019

Грязное быстрое исправление может указывать на то, какой dns контейнер должен использовать в команде сборки:

docker build --dns=1.1.1.1 -t mydocker .

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

docker run -ti openjdk:8-jre-alpine3.8 sh

Первая проверка того, какой сервер DNS используется:

cat /etc/resolv.conf

Я получаю сервер имен 192.168.65.1, который является хост-машиной

Теперь установите bind-tools, чтобы получить dig и запросить pypi.org

apk add bind-tools
dig pypi.org

Это должно дать вам ответ, который должен выглядеть следующим образом:

; <<>> DiG 9.12.3 <<>> pypi.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;pypi.org.          IN  A

;; ANSWER SECTION:
pypi.org.       31  IN  A   151.101.64.223
pypi.org.       31  IN  A   151.101.0.223
pypi.org.       31  IN  A   151.101.192.223
pypi.org.       31  IN  A   151.101.128.223

;; Query time: 27 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Tue Feb 26 08:25:29 UTC 2019
;; MSG SIZE  rcvd: 90

Mostскорее всего ваш ответ покажет вам, что днс не разрешается правильно.Чтобы получить больше информации о том, как разрешается домен, используйте опцию + trace для dig

dig +trace pypi.org

. Надеемся, что это должно показать, что отвечает с неправильным адресом.


Thisбыл мой первый ответ, оставив его здесь для дальнейшего использования

Учитывая, что он работает на вашей хост-ОС, похоже, у вас есть настройка прокси в конфигурации докера.

Откройте вашНастройки Docker и перейдите на вкладку прокси, чтобы увидеть.

Docker proxy settings

Это также может быть в вашем ~ / .docker / config.json.Примерно так:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

Источник: https://docs.docker.com/network/proxy/

0 голосов
/ 16 февраля 2019

Учитывая, что вы работаете с openjdk образом, в нем нет всего, что нужно ptyhon, добавьте это в ваш файл dockerfile

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.6 \
    python3-pip \
    && \
apt-get clean && \

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