Сценарий установки в контейнере Docker не выполняется из-за команды xz

718
Lafayette

Я пытаюсь установить PredictProtein для Docker отсюда . Скрипт для установки базы данных, используемый PredictProtein, загружает данные в виде .txzфайла.

После загрузки скрипт пытается распаковать файл. Это терпит неудачу, приводя к сообщению об ошибке

/usr/local/bin/setupdb: line 15: xz: command not found 

Почему это не удается? И как я мог решить это?

Я использую Docker версии 17.12.1-ce; Я запускаю его внутри виртуальной машины Ubuntu 16.04.3, используя VirtualBox

Сценарий (скопированный внутри контейнера) выглядит следующим образом:

#!/bin/bash  if [ -d /usr/share/rostlab-data/ ]; then echo "Removing current database..." rm -rf /usr/share/rostlab-data/ fi  mkdir /usr/share/rostlab-data/ cd /usr/share/rostlab-data/  echo "Downloading database release..." wget -O rostlab-data.txz "http://www.rostlab.org/services/ppmi/download_file?format=gzip&file_to_download=db"  echo "Extracting..." xz -d rostlab-data.txz tar xvf rostlab-data.tar rm -f rostlab-data.tar  echo "Done." 
1

1 ответ на вопрос

2
Viter

Поскольку команда xz не найдена, инструмент, вероятно, не установлен. Если контейнер основан на Ubuntu (вероятно, это не так), он будет установлен, поэтому я предполагаю, что он основан на Alpine.

Попробуйте установить xz!

apk add xz 

Или, если вы редактируете Dockerfile, просто добавьте оператор RUN в начале файла.

Вы имеете в виду, что я должен добавить эту команду в скрипт установки? Lafayette 6 лет назад 0
Если вы находитесь в контейнере с терминалом (в интерактивном режиме), вы можете просто напечатать его перед запуском скрипта. В противном случае добавьте его в качестве одной из первых строк в ваш Dockerfile "RUN apk add xz" Viter 6 лет назад 0
Я попытался `docker run ecbeaec0320f sudo apk add xz`, но я получил ошибку` docker: Ответ об ошибке от демона: OCI runtime создать не удалось: container_linux.go: 348: запуск процесса контейнера вызвал "exec: \" sudo \ ": исполняемый файл не найден в $ PATH ": неизвестно. (ecbeaec0320f - это идентификатор изображения) Lafayette 6 лет назад 0
Не используйте sudo с альпийским. Можете ли вы связать используемый Dockerfile? Viter 6 лет назад 0
Также https://training.play-with-docker.com/ops-stage1/ запустите первые 2 учебника в разделе «Практическое обучение» и попытайтесь понять команды менеджера пакетов в linux (apt-get в ubuntu и apk в alpine ). Viter 6 лет назад 0
Очень хорошо, я попробую их, спасибо. Я загрузил это изображение через `docker pull bromberglab / Foregnet Protein` Lafayette 6 лет назад 0
Кроме того, контейнер основан на Ubuntu, а не на Alpine: `docker exec my_predictprotein cat / etc / os-release NAME =" Ubuntu "VERSION =" 16.04.3 LTS (Xenial Xerus) "ID = ubuntu ID_LIKE = debian PRETTY_NAME =" Ubuntu 16.04 .3 LTS "VERSION_ID =" 16.04 "HOME_URL =" http://www.ubuntu.com/ "SUPPORT_URL =" http://help.ubuntu.com/ "BUG_REPORT_URL =" http://bugs.launchpad.net/ ubuntu / "VERSION_CODENAME = xenial UBUNTU_CODENAME = xenial` Lafayette 6 лет назад 0
Но если это скорее Ubuntu, чем Alpine, я думаю, что я должен использовать apt-get, а не apk - однако, когда я использую `docker run ecbeaec0320f apt-get install xz`, я получаю` Чтение списков пакетов ... Построение дерева зависимостей ... Чтение информации о состоянии ... E: Невозможно найти пакет xz` Lafayette 6 лет назад 0
эй, тебе нужно сначала сделать обновление apt-get && apt-get! Тогда вы можете сделать apt-get установить XZ Viter 6 лет назад 0

Похожие вопросы