Dockerfile и команда dpkg

Я пытаюсь создать Dockerfile для установки VuFind.

Это мой Dockerfile:

#Name of container: docker-vufind:3

# Pull base image
FROM ubuntu:16.04
MAINTAINER xxx  "xxx@mail.com"

#Install latest patches
RUN apt-get update && apt-get install -y \
    && apt-get install -y wget 

#Obtain the package
RUN wget http://downloads.sourceforge.net/vufind/vufind_3.1.1.deb?use_mirror=osdn -O vufind_3.1.1.deb

#Install it
RUN dpkg -i vufind_3.1.1.deb

#Install VuFind's dependecies
RUN apt-get install -y -f

Я запустил эти команды в bash моего Ubuntu, и программное обеспечение работало нормально, но, похоже, я не могу получить тот же результат с Dockerfile, потому что команда dpkg не выполнена из-за отсутствия зависимостей.

The command '/bin/sh -c dpkg -i vufind_3.1.1.deb' returned a non-zero code: 1

Является ли установка зависимостей (Apache, jdk, php...) перед командной строкой dpkg единственным способом создания работающего Dockerfile или существует более короткий путь?

2 ответа

Решение

Не самый элегантный, но:

#continue executing even if command fails
RUN dpkg -i vufind_3.1.1.deb || true

С версией 1.1 ~ exp11 (которая доступна с Ubuntu 16.04) вы можете устанавливать файлы.deb и разрешать зависимости напрямую с помощью apt в одиночестве:

apt install ./vufind_3.1.1.deb

Следите за ./!

Чуть элегантнее.

# Run both commands together
RUN dpkg -i vufind_3.1.1.deb; apt-get install -y -f

Похоже, нашел более чистую альтернативу, по крайней мере, для моего случая. поскольку aptCLI нестабилен (как они предупреждают во время сборки Docker), я решил работать с пакетом gdebi-core который может не .deb пакеты и их зависимости:

sudo apt-get install gdebi-core
sudo gdebi /path/to/filename.deb

Проверьте этот ответ на Superuser для более подробной информации /

Другие вопросы по тегам