apt-add-repository: помилка команди не знайдена в Dockerfile


92

Я щойно створив дуже простий файл Docker у своєму терміналі, в основному я зробив наступне:

mkdir pgrouted
cd pgrouted
touch Dockerfile

Тепер я відкриваю файл Docker у редакторі nano і додаю наступні команди до файлу 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]"

Весь файл Docker можна переглянути ТУТ з одного погляду.

Тепер, коли я намагаюся створити файл Docker, приблизно так:

docker build -t gautam/pgrouted:v1 .

Файл Docker запускається, і тоді я отримую наступну помилку:

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

Чому я отримую цю помилку?

Відповіді:


121

apt-add-repository просто немає у базовому образі Ubuntu. Спочатку його потрібно встановити. спробуйapt-get install software-properties-common

До речі, вам не потрібно використовувати sudo у файлі Docker, оскільки команди за замовчуванням виконуються як root, якщо ви не перейшли до іншого користувача за допомогою USERкоманди.


2
я додав pt-get install software-properties-commonяк першу RUN pt-get install software-properties-commonкоманду, ось так, тепер я отримую цю помилку chopapp.com/#8a4vdsnw
Олександр Солонік

1
залежно від вашої версії Ubuntu, це може бути python-software-propertiesабоsoftware-properties-common
user2915097

4
на ubuntu 16.04 це хоче встановити 46 Мб додаткових даних: / занадто багато, щоб мати можливість виконати просту команду.
cweiske

27
Ні властивості програмного забезпечення python, ні властивості загального програмного забезпечення не є дійсними
Джонатан Нойфельд,

10
Тільки для тих, хто все ще отримує якусь помилку. Я вирішив, поставивши і встановити оновлення на тому самому рядку: apt-get update && apt-get install -y software-properties-common. Спочатку запустити оновлення, а потім встановити, здається, не працює. Можливо помилка Docker
FedFranz,

57

Додайте ці рядки перед запуском apt-add-repositoryкоманди

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

2
Мені довелося додати --fix-missing до першого рядка.
Edhowler

1
Який сенс rm -rf /var/lib/apt/lists/*?
jumpnett

rmРозстібає ефекти apt-get update. Немає сенсу зберігати метадані пакета в шарі контейнера. Якщо пізніше ви захочете отримати apt-get installдодаткові пакети, ви apt-get updateвсе одно повинні зробити новий .
Токсаріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.