2015-06-23 16 views
9

Sto usando l'immagine ufficiale della finestra mobile Python per python 2.7. L'applicazione con cui sto lavorando richiede pyhon-ldap.esegui python-ldap con immagine ufficiale docker python come base

mio dockerfile si presentava così:

FROM python:2.7 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install -r requirements.txt 
ADD . /code/ 

Dove python-ldap è in requirements.txt

Naturalmente mi imbatto in questo:

In file included from Modules/LDAPObject.c:9:0: 
Modules/errors.h:8:18: fatal error: lber.h: No such file or directory 
#include "lber.h" 
       ^
compilation terminated. 
error: command 'gcc' failed with exit status 

che so è da non avere libldap2-dev e alcuni altri pacchetti installati. Quindi faccio un po 'di ricerche e trovo che l'immagine ufficiale di Python sia costruita su Debian Debian. Sono più di una persona RedHat, ma so di apt-get in modo modifico il mio file di finestra mobile al di sotto:

FROM python:2.7 
RUN apt-get install -y libldap2-dev 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install -r requirements.txt 
ADD . /code/ 

E che gli errori fuori come di seguito

Step 1 : RUN apt-get install -y libldap2-dev 
---> Running in 2ca6155b606e 
Reading package lists... 
Building dependency tree... 
Reading state information... 
Package libldap2-dev is not available, but is referred to by another package. 
This may mean that the package is missing, has been obsoleted, or 
is only available from another source 

E: Package 'libldap2-dev' has no installation candidate 

Ok, Ho capito che, mancano i repository, faccio qualche ricerca in più e ritorna nell'immagine base di python faccio ruotare un container e muck around. Posso dimostrare ci sono repos installati (anche se onestamente non ho idea se questi sono validi)

cat /etc/apt/sources.list 
deb http://httpredir.debian.org/debian jessie main 
deb http://httpredir.debian.org/debian jessie-updates main 
deb http://security.debian.org jessie/updates main 

I cant sembrano inchiodare tutto giù che cosa sta succedendo, ma sembra che apt in realtà non hanno accesso esterno al repos e apt-cache search restituiscono solo pacchetti che non sono già stati richiamati. Come posso ottenere l'installazione di cose all'interno di un contenitore e/o riconfigurarlo per fare effettivamente qualcosa?

C'è un modo migliore per ottenere i pacchetti ho bisogno di compilare python-ldap con l'immagine pitone ufficiale?

risposta

10

Esecuzione apt-get update prima di installare dovrebbe fare il lavoro:

RUN apt-get update && apt-get install -y libldap2-dev

+0

Yup, grazie! Tutto funziona come previsto ora – fishpen0

1

Questo ha funzionato per me sia con Python 3.4 & Python 3.5:

RUN apt-get update && apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev 
Problemi correlati