apt-add-repository: error de comando no encontrado en Dockerfile


92

Acabo de hacer un archivo Docker muy simple en mi terminal, básicamente hice lo siguiente:

mkdir pgrouted
cd pgrouted
touch Dockerfile

Ahora abro el archivo Docker en el editor nano y agrego los siguientes comandos al archivo Docker:

FROM ubuntu

MAINTAINER Gautam <gautamx07@yahoo.com>

LABEL Description="pgrouting excercise" Vendor="skanatek" Version="1.0"

ENV BBOX="-122.8,45.4,-122.5,45.6"

# Add pgRouting launchpad repository
RUN sudo apt-add-repository -y ppa:ubuntugis/ppa
RUN sudo apt-add-repository -y ppa:georepublic/pgrouting
RUN sudo apt-get update

# Install pgRouting package (for Ubuntu 14.04)
RUN sudo apt-get install postgresql-9.3-pgrouting

# Install osm2pgrouting package
RUN sudo apt-get install osm2pgrouting

# Install workshop material (optional, but maybe slightly outdated)
RUN sudo apt-get install pgrouting-workshop

# For workshops at conferences and events:
# Download and install from http://trac.osgeo.org/osgeo/wiki/Live_GIS_Workshop_Install
RUN wget --no-check-certificate https://launchpad.net/~georepublic/+archive/pgrouting/+files/pgrouting-workshop_2.0.6-ppa1_all.deb

RUN sudo dpkg -i pgrouting-workshop_2.0.6-ppa1_all.deb

# Review: Not sure weather this should be in the dockerfile
RUN cp -R /usr/share/pgrouting/workshop ~/Desktop/pgrouting-workshop

# Log in as user "user"
RUN psql -U postgres

# Create routing database
RUN CREATE DATABASE routing;

# Add PostGIS functions
RUN CREATE EXTENSION postgis;

# Add pgRouting core functions
CREATE EXTENSION pgrouting;

# Download using Overpass XAPI (larger extracts possible than with default OSM API)
wget --progress=dot:mega -O "sampledata.osm" "http://www.overpass-api.de/api/xapi?*[bbox=${BBOX}][@meta]"

Todo el Dockerfile se puede ver AQUÍ de un vistazo.

Ahora, cuando trato de construir el Dockerfile, así:

docker build -t gautam/pgrouted:v1 .

El Dockerfile se ejecuta y luego aparece el siguiente error:

Step 4 : RUN sudo apt-add-repository -y ppa:ubuntugis/ppa
 ---> Running in c93c3c5fd5e8
sudo: apt-add-repository: command not found
The command '/bin/sh -c sudo apt-add-repository -y ppa:ubuntugis/ppa' returned a non-zero code: 1

¿Por qué recibo este error?

Respuestas:


121

apt-add-repository simplemente no está en la imagen base de Ubuntu. Primero deberá instalarlo. tratarapt-get install software-properties-common

Por cierto, no necesita usar sudo en el Dockerfile porque los comandos se ejecutan como root de forma predeterminada a menos que cambie a otro usuario con el USERcomando.


2
Añadí pt-get install software-properties-commonque el primer RUN pt-get install software-properties-commoncomando, como tal, ahora me sale este error chopapp.com/#8a4vdsnw
Alexander Solonik

1
dependiendo de su versión de Ubuntu, puede ser python-software-propertiesosoftware-properties-common
user2915097

4
en ubuntu 16.04 esto quiere instalar 46MiB datos adicionales: / demasiado para poder ejecutar un comando simple.
cweiske

27
Ni las propiedades del software python ni las propiedades comunes del software son válidas
Jonathan Neufeld

10
Solo para aquellos que todavía están recibiendo algún error. He resuelto poniendo actualización e instalarla en la misma línea: apt-get update && apt-get install -y software-properties-common. Ejecutar la actualización primero y luego instalar no parece funcionar. Posiblemente un error de Docker
FedFranz

57

Agregue estas líneas antes de ejecutar el apt-add-repositorycomando

RUN apt-get update && \
    apt-get install -y software-properties-common && \
    rm -rf /var/lib/apt/lists/*

2
Tuve que agregar --fix-missing a la primera línea.
Edhowler

1
¿De qué sirve rm -rf /var/lib/apt/lists/*?
jumpnett

La rmdeshace los efectos de la apt-get update. No tiene sentido almacenar los metadatos del paquete en la capa contenedora. Si más tarde desea apt-get installpaquetes adicionales, debe hacer uno nuevo de apt-get updatetodos modos.
Toxaris
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.