update run compose ubuntu docker

run - En Docker, la instalación de apt-get falla con los errores "Error al recuperar http://archive.ubuntu.com/... 404 Not Found". ¿Por qué? ¿Cómo podemos pasarlo?



uninstall docker ubuntu (3)

Mi equipo usa Docker (con ubuntu:14.04 imagen base) para el desarrollo local y a menudo tenemos que reconstruir algunas o todas nuestras imágenes. Pero a menudo obtenemos errores al descargar paquetes con apt-get install , incluso inmediatamente después de ejecutar apt-get -y update . Por ejemplo, hoy veo

Err http://archive.ubuntu.com/ubuntu/ trusty-security/main libxml2 amd64 2.9.1+dfsg1-3ubuntu4.7 404 Not Found [IP: 91.189.88.161 80] Err http://archive.ubuntu.com/ubuntu/ trusty-security/main libxml2-dev amd64 2.9.1+dfsg1-3ubuntu4.7 404 Not Found [IP: 91.189.88.161 80] Fetched 84.7 MB in 1min 6s (1281 kB/s) Unable to correct missing packages. E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/libx/libxml2/libxml2_2.9.1+dfsg1-3ubuntu4.7_amd64.deb 404 Not Found [IP: 91.189.88.161 80] E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/libx/libxml2/libxml2-dev_2.9.1+dfsg1-3ubuntu4.7_amd64.deb 404 Not Found [IP: 91.189.88.161 80] E: Aborting install.

Aparentemente, la versión específica de un paquete en particular se ha eliminado del archivo y se ha reemplazado por una versión de parche con un nombre ligeramente diferente. Por ejemplo, el error anterior está buscando libxml2_2.9.1+dfsg1-3ubuntu4.7_amd64.deb pero la versión en el servidor es libxml2_2.9.1+dfsg1-3ubuntu4.8_amd64.deb .

A menudo, esto se puede resolver eliminando la imagen base ( docker rmi ubuntu:14.04 ) y reconstruyendo; la imagen de ubuntu recién descargada tiene el número de parche correcto y encuentra el archivo de archivo correcto. Pero incluso esto no siempre funciona, probablemente debido a un retraso entre una nueva actualización menor a la dependencia de Ubuntu db y el despliegue de esa nueva ubuntu:14.04 imagen en Docker Hub.

Hemos intentado usar apt-get flags --fix-missing y --fix-broken y tampoco funcionan de manera consistente.

¿Alguna otra idea?

La instalación de apt-get falla con el error No encontrado porque el paquete eliminado del repositorio es un problema similar, pero la respuesta aceptada es inaceptable porque no es posible automatizar. Nuestro proceso de desarrollo diario, que incluye creación e implementación automáticas, está todo guionado y usando Docker y no es práctico hackear dentro de un archivo Docker cada vez que un archivo en particular se pierde (y luego eliminar el truco después de unas pocas horas o días).

En respuesta a @ prateek05, aquí está la /etc/apt/sources.list de la imagen oficial de ubuntu:14.04 docker:

root@72daa1942714:/# cat /etc/apt/sources.list # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://archive.ubuntu.com/ubuntu/ trusty main restricted deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted ## Major bug fix updates produced after the final release of the ## distribution. deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted ## Uncomment the following two lines to add software from the ''universe'' ## repository. ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team. Also, please note that software in universe WILL NOT receive any ## review or updates from the Ubuntu security team. deb http://archive.ubuntu.com/ubuntu/ trusty universe deb-src http://archive.ubuntu.com/ubuntu/ trusty universe deb http://archive.ubuntu.com/ubuntu/ trusty-updates universe deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates universe ## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. # deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted # deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted deb http://archive.ubuntu.com/ubuntu/ trusty-security universe deb-src http://archive.ubuntu.com/ubuntu/ trusty-security universe # deb http://archive.ubuntu.com/ubuntu/ trusty-security multiverse # deb-src http://archive.ubuntu.com/ubuntu/ trusty-security multiverse


El problema podría ser potencialmente con las fuentes de ubuntu

Compruebe /etc/apt/sources.list

Si ves deb http://archive.ubuntu.com/ubuntu main universe restricted multiverse , ese podría ser el problema potencial.

Arregle eso reemplazándolo con deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse

Alternativamente, podría ser que el espejo en sí no responda. archive.ubuntu.com

Name: archive.ubuntu.com Address: 91.189.88.152 Name: archive.ubuntu.com Address: 91.189.88.161 Name: archive.ubuntu.com Address: 91.189.88.149

Reemplace archive.ubuntu.com con un espejo de mayor confianza diga us.archive.ubuntu.com

Name: us.archive.ubuntu.com Address: 91.189.91.23 Name: us.archive.ubuntu.com Address: 91.189.91.26

(editar por el asker inicial):

Gracias, prateek05! My Dockerfile ahora comienza:

FROM ubuntu:14.04 RUN sed -i'''' ''s/archive/.ubuntu/.com/us/.archive/.ubuntu/.com/'' /etc/apt/sources.list RUN apt-get -y update

Y parece que funciona. Pero como se trata de un problema esporádico, solo el tiempo dirá ...


Ha declarado que su archivo Docker contiene RUN apt-get -y update como su propia instrucción RUN . Sin embargo, debido al almacenamiento en caché , si todos los cambios en el archivo Docker ocurren más adelante en el archivo, cuando Docker se ejecuta, Docker reutilizará la imagen intermedia creada la última vez que se ejecutó RUN apt-get -y update lugar de ejecutar el comando nuevamente. por lo tanto, las líneas de apt-get install recientemente agregadas o editadas utilizarán datos antiguos, lo que dará lugar a los errores que ha observado.

Hay dos formas de solucionar esto:

  1. Pase la --no-cache a la compilación de Docker, forzando cada sentencia en Dockerfile a ejecutarse cada vez que se construye la imagen.

  2. Vuelva a escribir el archivo Docker para combinar los comandos apt-get en una sola instrucción RUN apt-get update && apt-get install foo bar ... : RUN apt-get update && apt-get install foo bar ... De esta forma, cada vez que se edite la lista de paquetes para instalar, docker build se verá obligado a volver a ejecutar toda la instrucción RUN y, por lo tanto, volver a ejecutar apt-get update antes de la instalación.

La página de mejores prácticas de Dockerfile en realidad tiene una sección completa sobre apt-get comandos apt-get en Dockerfiles . Te sugiero que lo leas.


El uso de fuentes FTP funciona el 100% del tiempo.

RUN echo / ''deb ftp://ftp.us.debian.org/debian/ jessie main/n / deb ftp://ftp.us.debian.org/debian/ jessie-updates main/n / deb http://security.debian.org jessie/updates main/n'' / > /etc/apt/sources.list