Estoy tratando de construir un dockerfile, pero el problema es que cuando intenta construir específicamente la criptografía no se está construyendo.
MI Dockerfile
FROM python:3.7-alpine ENV PYTHONUNBUFFERED 1 RUN apk update \ # psycopg2 dependencies && apk add --virtual build-deps gcc python3-dev musl-dev\ && apk add postgresql-dev \ && apk add build-base \ # Pillow dependencies && apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \ # CFFI dependencies && apk add libffi-dev py-cffi \ # Translations dependencies && apk add gettext \ # https://docs.djangoproject.com/en/dev/ref/django-admin/#dbshell && apk add postgresql-client \ # cairo && apk add cairo cairo-dev pango-dev gdk-pixbuf-dev poppler-utils # fonts for weasyprint RUN mkdir ~/.fonts COPY ./fonts/* /root/.fonts/ # secret key (should be in docker-secrets, or we need to run minikube locally RUN mkdir /etc/secrets COPY secret.readme proxy_rsa_key* /etc/secrets/ # Requirements are installed here to ensure they will be cached. COPY ./requirements /requirements RUN pip install -r /requirements/local.txt COPY ./compose/local/django/entrypoint /entrypoint RUN sed -i 's/\r//' /entrypoint RUN chmod +x /entrypoint COPY ./compose/local/django/start /start RUN sed -i 's/\r//' /start RUN chmod +x /start COPY ./compose/local/django/celery/worker/start /start-celeryworker RUN sed -i 's/\r//' /start-celeryworker RUN chmod +x /start-celeryworker COPY ./compose/local/django/celery/beat/start /start-celerybeat RUN sed -i 's/\r//' /start-celerybeat RUN chmod +x /start-celerybeat COPY ./compose/local/django/celery/flower/start /start-flower RUN sed -i 's/\r//' /start-flower RUN chmod +x /start-flower WORKDIR /app ENTRYPOINT ["/entrypoint"]cuando intento construir mi dockerfile, muestra:
Building wheel for cryptography (PEP 517): finished with status 'error' ERROR: Command errored out with exit status 1: error: Can not find Rust compiler ---------------------------------------- ERROR: Failed building wheel for cryptographyIntenté resolver pero no pude. Soy un novato en Docker. Por favor, ayúdame a deshacerme de este problema.
Editando pyvenv.cfg agregando mi .env :
CRYPTOGRAPHY_DONT_BUILD_RUST=1 luego, haciendo pip install cryptography , resolvió mi problema.
Enfrenté el mismo problema y para resolverlo probé lo siguiente:
Respuesta proporcionada por @larsks. RUN apk add cargo openssl-dev ayudó. Pero esto resultó en un tamaño de imagen enorme para mí (> 1 GB). La mejor práctica es apuntar siempre al mínimo indispensable con un tamaño de imagen pequeño. De esta manera, no nos exponemos a ninguna vulnerabilidad externa.
Respuesta proporcionada por Sabri Özgür, ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1 . ¡Esto funcionó muy bien!
Según el comentario agregado por @ riptusk331 para la respuesta anterior, simplemente ignorar la compilación de Rust solo puede funcionar por ahora, ya que Cryptography 3.5+ comenzará a requerir Rust.
Mi solución solo para estar seguro fue;
... ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1 ... RUN pip install cryptography==3.4.6 ...De esta manera, logré mantener el tamaño de la imagen en un valor considerablemente más bajo mientras lograba que la compilación pasara.
pip install -U pip es todo lo que tenía que hacer
Ya que el error es...
error: Can not find Rust compiler ...la solución es instalar el compilador rust. También necesitará cargo , el administrador de paquetes Rust, y parece que a su Dockerfile le falta openssl-dev .
Lo siguiente se construye con éxito para mí:
FROM python:3.7-alpine ENV PYTHONUNBUFFERED 1 RUN apk add --update \ build-base \ cairo \ cairo-dev \ cargo \ freetype-dev \ gcc \ gdk-pixbuf-dev \ gettext \ jpeg-dev \ lcms2-dev \ libffi-dev \ musl-dev \ openjpeg-dev \ openssl-dev \ pango-dev \ poppler-utils \ postgresql-client \ postgresql-dev \ py-cffi \ python3-dev \ rust \ tcl-dev \ tiff-dev \ tk-dev \ zlib-dev RUN pip install cryptography Tenga en cuenta que la línea de comando apk add ... anterior es en gran medida la misma que tiene; Acabo de simplificar las declaraciones múltiples de apk add ... en una sola ejecución de apk add .
criptografía < 3.5:
Puede omitir la instalación de Rust y otras dependencias relacionadas agregando la siguiente línea antes de los comandos de apk add:
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1criptografía >= 3.5 : Gracias @ riptusk331
Después de esta versión, se requerirá óxido. Instale una versión específica <3.5 o siga las instrucciones de instalación de criptografía. Se indica en el enlace adjunto que se explican de manera muy agresiva en los documentos.
Algunas personas pueden venir aquí (como lo hice yo) buscando una solución solo para Python, no necesariamente Alpine.
Hay varias opciones disponibles, mencionadas en el problema de github . (solo elige uno de estos)
cryptography a 3.4.x