apt-add-repository: erreur de commande introuvable dans Dockerfile

92

Je viens de créer un fichier Docker très simple dans mon terminal, en gros, j'ai fait ce qui suit:

mkdir pgrouted
cd pgrouted
touch Dockerfile

Maintenant, j'ouvre le fichier Docker dans l' éditeur nano et j'ajoute les commandes suivantes au fichier 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]"

L'ensemble du Dockerfile peut être vu ICI en un coup d'œil.

Maintenant, quand j'essaye de construire le Dockerfile, comme ceci:

docker build -t gautam/pgrouted:v1 .

Le Dockerfile s'exécute et j'obtiens l'erreur ci-dessous:

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

Pourquoi ai-je cette erreur?

Alexandre Solonik
la source

Réponses:

121

apt-add-repository n'est tout simplement pas dans l'image Ubuntu de base. Vous devrez d'abord l'installer. essayerapt-get install software-properties-common

En passant, vous n'avez pas besoin d'utiliser sudo dans le Dockerfile car les commandes s'exécutent en tant que root par défaut, sauf si vous passez à un autre utilisateur avec la USERcommande.

Michael
la source
2
J'ai ajouté pt-get install software-properties-commoncomme première RUN pt-get install software-properties-commoncommande, comme ça, maintenant j'obtiens cette erreur chopapp.com/#8a4vdsnw
Alexander Solonik
1
selon votre version d'Ubuntu, cela peut être soit python-software-propertiessoitsoftware-properties-common
user2915097
4
sur ubuntu 16.04 cela veut installer 46MiB de données supplémentaires: / trop pour pouvoir exécuter une simple commande.
cweiske
27
Ni python-software-properties ni software-properties-common ne sont valides
Jonathan Neufeld
10
Juste pour ceux qui ont encore des erreurs. Je résolus par la mise à jour et installer sur la même ligne: apt-get update && apt-get install -y software-properties-common. L'exécution de la mise à jour puis de l'installation ne semble pas fonctionner. Peut-être un bogue Docker
FedFranz
57

Ajoutez ces lignes avant d'exécuter la apt-add-repositorycommande

RUN apt-get update && \
    apt-get install -y software-properties-common && \
    rm -rf /var/lib/apt/lists/*
Apoorv Agarwal
la source
2
J'ai dû ajouter --fix-missing à la première ligne.
Edhowler
1
À quoi ça sert rm -rf /var/lib/apt/lists/*?
jumpnett le
Le rmannule les effets du apt-get update. Il est inutile de stocker les métadonnées du package dans la couche conteneur. Si vous souhaitez plus tard apt-get installdes packages supplémentaires, vous devez apt-get updatequand même en faire un nouveau .
Toxaris