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 <[email protected]>

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?

Alexander Solonik
fuente

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.

Miguel
fuente
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/*
Apoorv Agarwal
fuente
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