apt-add-repository: erro de comando não encontrado no Dockerfile


92

Acabei de criar um arquivo Docker muito simples em meu terminal, basicamente, fiz o seguinte:

mkdir pgrouted
cd pgrouted
touch Dockerfile

Agora abro o arquivo Docker no editor nano e adiciono os seguintes comandos ao arquivo 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]"

O Dockerfile inteiro pode ser visto AQUI de relance.

Agora, quando tento construir o Dockerfile, assim:

docker build -t gautam/pgrouted:v1 .

O Dockerfile é executado e, em seguida, recebo o erro abaixo:

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 que estou recebendo este erro?

Respostas:


124

apt-add-repository simplesmente não está na imagem base do Ubuntu. Você primeiro precisa instalá-lo. experimentarapt-get install software-properties-common

A propósito, você não precisa usar sudo no Dockerfile porque os comandos são executados como root por padrão, a menos que você mude para outro usuário com o USERcomando.


2
Eu adicionei pt-get install software-properties-commoncomo o primeiro RUN pt-get install software-properties-commoncomando, assim, agora recebo este erro chopapp.com/#8a4vdsnw
Alexander Solonik

1
dependendo da versão do Ubuntu, pode ser python-software-propertiesousoftware-properties-common
user2915097

4
no ubuntu 16.04, ele deseja instalar dados adicionais de 46MiB: / demais para ser capaz de executar um comando simples.
cweiske

27
Nem python-software-properties nem software-properties-common são válidos
Jonathan Neufeld

11
Apenas para aqueles que ainda estão recebendo algum erro. I resolvido colocando atualização e instalar na mesma linha: apt-get update && apt-get install -y software-properties-common. Executar a atualização primeiro e depois instalar não parece funcionar. Possivelmente um bug do Docker
FedFranz,

59

Adicione essas linhas antes de executar o apt-add-repositorycomando

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

2
Tive que adicionar --fix-missing à primeira linha.
Edhowler

O rmdesfaz os efeitos do apt-get update. Não faz sentido armazenar os metadados do pacote na camada de contêiner. Se mais tarde você quiser apt-get installpacotes adicionais, você deve fazer um novo de apt-get updatequalquer maneira.
Toxaris,
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.