apt-add-repository: polecenie nie znaleziono błędu w pliku Dockerfile

92

Właśnie utworzyłem bardzo prosty plik Dockera na moim terminalu, zasadniczo wykonałem następujące czynności:

mkdir pgrouted
cd pgrouted
touch Dockerfile

Teraz otwieram plik Docker w edytorze nano i dodaję następujące polecenia do pliku 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]"

Cały plik Dockerfile można zobaczyć TUTAJ w skrócie.

Teraz, gdy próbuję zbudować plik Dockerfile, na przykład:

docker build -t gautam/pgrouted:v1 .

Plik Dockerfile zostaje uruchomiony, a następnie pojawia się następujący błąd:

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

Dlaczego otrzymuję ten błąd?

Alexander Solonik
źródło

Odpowiedzi:

121

apt-add-repository po prostu nie znajduje się w podstawowym obrazie Ubuntu. Najpierw musisz go zainstalować. próbowaćapt-get install software-properties-common

Nawiasem mówiąc, nie musisz używać sudo w pliku Dockerfile, ponieważ polecenia działają domyślnie jako root, chyba że zmienisz na innego użytkownika za pomocą USERpolecenia.

Michał
źródło
2
Zrobiłem dodać pt-get install software-properties-commonjako pierwszy RUN pt-get install software-properties-commonpolecenia, tak jak teraz uzyskać ten błąd chopapp.com/#8a4vdsnw
Alexander Solonik
1
w zależności od Ciebie wersję Ubuntu, może to być python-software-propertiesalbosoftware-properties-common
user2915097
4
w systemie Ubuntu 16.04 chce zainstalować 46 MiB dodatkowych danych: / zbyt dużo, aby móc wykonać proste polecenie.
cweiske
27
Ani właściwości-oprogramowania-Pythona, ani właściwości-oprogramowania-wspólne nie są poprawne
Jonathan Neufeld
10
Tylko dla tych, którzy nadal otrzymują jakiś błąd. I rozwiązać poprzez umieszczenie aktualizację i zainstalować na tej samej linii: apt-get update && apt-get install -y software-properties-common. Wydaje się, że uruchomienie aktualizacji, a następnie instalacji, nie działa. Prawdopodobnie błąd
Dockera
57

Dodaj te linie przed uruchomieniem apt-add-repositorypolecenia

RUN apt-get update && \
    apt-get install -y software-properties-common && \
    rm -rf /var/lib/apt/lists/*
Apoorv Agarwal
źródło
2
Musiałem dodać --fix-missing do pierwszego wiersza.
Edhowler,
1
Po co rm -rf /var/lib/apt/lists/*?
Jumpnett
rmCofa efekty funkcji apt-get update. Nie ma sensu przechowywanie metadanych pakietu w warstwie kontenera. Jeśli później zechcesz apt-get installdodać dodatkowe pakiety, apt-get updatemimo wszystko powinieneś zrobić nowe .
Toxaris