2015-02-11 6 views
2

Работы с Докер и я замечаю, почти везде «RUN» команда начинается с APT-получить обновления & & APT-получить установку и т.д.Dockerfile руководства по установке множественного Деба файлы

Что делать, если у вас нет Интернета доступа и просто хотите сделать «dpkg -i ./deb-directory/*.deb» вместо этого?

Ну, я пробовал это, и я продолжаю терпеть неудачу. Любые рекомендации будут оцениваться:

dpkg: error processing archive ./deb-directory/*.deb (--install): 
    cannot access archive: No such file or directory 
Errors were encountered while processing: ./deb-directory/*.deb 
INFO[0002] The command [/bin/sh -c dpkg -i ./deb-directory/*.deb] returned a non-zero code: 1` 

Чтобы уточнить, да, каталог «deb-directory» существует. Фактически он находится в том же каталоге, что и файл Docker, который я создаю.

+2

Пожалуйста, разместите свой файл Dockerfile, возможно, вам нужно * ADD * файл deb? – svenhornberg

+0

Это не идеальное решение, если у меня есть 85 файлов deb, которые я хочу установить, мне нужно ДОБАВИТЬ 85 раз? – user3614014

+2

ADD также может скопировать каталог не только файлов, поэтому вам не нужно копировать 85 файлов.Но в любом случае его проще, если вы разместите свой файл Docker или минимальный пример, например, ubuntu и один deb-файл, чтобы кто-то/мы могли воспроизвести и узнать из вашей ошибки. – svenhornberg

ответ

3

Возможно, это ошибка, я открою билет на их github, чтобы узнать. Редактировать: Я сделал это here.

Редактировать2: Кто-то ответил на лучший способ сделать это по проблеме github.

* является метасимволом оболочки. Вам нужно вызвать оболочку для ее расширения.

docker run somecontainer sh -c 'dpkg -i /debdir/*.deb'

!!! Забудьте следующее, но я оставляю его здесь, чтобы отслеживать мои шаги рефлексии !!!

Проблема возникает из-за инструкции *, которая, похоже, не работает с командой docker run dpkg. Я попробовал вашу команду внутри контейнера (используя интерактивную оболочку), и он работал хорошо. Похоже, dpkg пытается установить так называемый файл ./deb-directory/*.deb, который не существует, а не устанавливает все файлы .deb, содержащиеся там.

Я только что применил обходное решение. Скопируйте сценарий .sh в свой контейнер, chmod +x, а затем используйте его как свою команду. (FYI, предпочитают использовать COPY вместо ADD, когда файл не копируется удаленно Проверить the best practices for writing Dockerfiles для получения дополнительной информации.).

Это мой Dockerfile, например, с целью:

FROM debian:latest 
MAINTAINER Vrakfall <[email protected]> 

COPY install.sh/
#debdir is a directory 
COPY debdir /debdir 
RUN chmod +x /install.sh 

CMD ["/install.sh"] 

install.sh (копируется в корневой каталог) просто содержит:

#!/bin/bash 
dpkg -i /debdir/*.deb 

И следующий

docker build -t debiantest . 
docker run debiantest 

хорошо работает и устанавливает все пакеты, содержащиеся в каталоге /debdir.

 Смежные вопросы

  • Нет связанных вопросов^_^