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.