2016-03-03 21 views
8

ho questo piccolo DockerfileAlpine 3.3, Python 2.7.11, urllib2 SSL causando: CERTIFICATE_VERIFY_FAILED

FROM alpine:3.3 
RUN apk --update add python 
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"] 

Costruire con docker build -t alpine-py/01 . e poi eseguirlo con docker run -it --rm alpine-py/01 crea il seguente output

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
    File "/usr/lib/python2.7/urllib2.py", line 431, in open 
    response = self._open(req, data) 
    File "/usr/lib/python2.7/urllib2.py", line 449, in _open 
    '_open', req) 
    File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python2.7/urllib2.py", line 1240, in https_open 
    context=self._context) 
    File "/usr/lib/python2.7/urllib2.py", line 1197, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> 

Ieri Sono stato morso dalla recente versione di OpenSSL 1.0.2g, che ha causato la mancata compilazione di py-cryptograpy. Fortunatamente i ragazzi di py-cryptography hanno rilasciato una nuova versione su PyPI un paio d'ore più tardi. Il problema era che una funzione in OpenSSL aveva una nuova firma.

Potrebbe essere correlato o mi manca qualcosa?

risposta

10

È necessario installare CA-certificati per essere in grado di convalidare certs firmati da CA pubbliche:

FROM alpine:3.3 
RUN apk --no-cache add python ca-certificates 
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"] 
+0

Grazie, questo in realtà mi ha salvato. –

0

Sarà necessario aggiornare alpina come libssl deve essere aggiornato con una patch

FROM alpine:3.3 
RUN apk -U upgrade && \ 
    apk -U add python ca-certificates && \ 
    update-ca-certificates 
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"] 

apk -u upgrade sarà l'aggiornamento questi:

  • libcrypto1.0 (1.0.2e-R0 -> 1.0.2g-R0)
  • libssl1.0 (1.0.2e-r0 -> 1.0.2g-r0)
+0

sì, grazie, la risposta accettata era già la soluzione dicendomi di aggiungere 'ca-certificates'. Oh, capisco, nel mio caso l'aggiornamento non era necessario, ma grazie per il suggerimento, potrebbe tornare utile qualche volta. –

+0

Ma questi aggiornamenti non vengono applicati comunque? Penso che quando stavo installando 'python-dev' potevo vedere che stava aggiornando anche tutte le librerie usate. –

+0

per l'apk, l'aggiornamento "Aggiorna i pacchetti attualmente installati". Nelle versioni successive di Alpine è richiesta una patch per libssl e libcrypto. Aggiungendo, ad esempio apk, aggiungete python-dev, esso estrae le dipendenze richieste dal maintainer per quel pacchetto, che potrebbe non essere lo stesso. –