Dockerfile и команда dpkg

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

Это мой Dockerfile:

#Name of container: docker-vufind:3

# Pull base image
FROM ubuntu:16.04
MAINTAINER xxx  "[email protected]"

#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 единственным способом создать работающий файл Docker или есть более короткий путь?


person Pickeroll    schedule 16.12.2016    source источник


Ответы (4)


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

#continue executing even if command fails
RUN dpkg -i vufind_3.1.1.deb || true
person CTodea    schedule 16.12.2016
comment
Последняя строчка не нужна? т.е. apt-get install -f также установит ранее предпринятый пакет deb. - person Dan M.; 12.06.2017
comment
Действительно, последняя строка больше не нужна. Все должно решиться после второй команды. - person gXg; 31.08.2017
comment
Нет ли способа запустить dpkg -i package.deb с зависимостями в одной команде вместо того, чтобы потом запускать apt-get install -f, что уродливо и раздражает? - person Augustin Riedinger; 16.04.2019
comment
@AugustinRiedinger dpkg не может разрешать зависимости, потому что он управляет только пакетами, а не репозиториями (например, yum или apt) - person CTodea; 28.06.2019
comment
Я не уверен, почему строка apt-get install -y -f была удалена. Возможно, это было что-то особенное для более поздней версии VuFind. Я пришел сюда, пытаясь установить зависимости для wkhtmltopdf, потому что dpkg -i ... говорил dpkg: dependency problems prevent configuration of wkhtmltox: wkhtmltox depends on fontconfig; however: Package fontconfig is not installed... и т. д. Строка apt-get install -y -f установила все зависимости. Спасибо! - person Tyler Collier; 11.03.2021

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

apt install ./vufind_3.1.1.deb

Обратите внимание на ./!

person Murmel    schedule 22.08.2017
comment
Благодарю вас! Это золото. И у них же apt нет ничего нового, кроме причудливой полосы загрузки :D - person Anas Tiour; 14.06.2019

Чуть более элегантный.

# Run both commands together
RUN dpkg -i vufind_3.1.1.deb; apt-get install -y -f
person Saurabh Prakash    schedule 14.05.2020

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

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

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

person Anas Tiour    schedule 14.06.2019