Dockerfile не может найти исполняемый скрипт (такого файла или каталога нет) - PullRequest
0 голосов
/ 10 июня 2019

Я пишу Dockerfile, чтобы создать изображение для веб-сервера (точнее, блестящего сервера). Он работает хорошо, но это зависит от огромной папки базы данных (db/), которая не распространяется с пакетом, поэтому я хочу выполнить всю эту предварительную обработку при создании образа, запустив соответствующий скрипт в Dockerfile.

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

Репо имеет следующую структуру:

Dockerfile
preprocessing_files
configuration_files
app/
    application_files
    db/
        processed_files

Так что app/db/ не существует, но создается и заполняется файлами при запуске preprocessing_files.

Dockerfile имеет следующий вид:

# Install R version 3.6
FROM r-base:3.6.0

# Install Ubuntu packages
RUN apt-get update && apt-get install -y \
    sudo \
    gdebi-core \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev/unstable \
    libxml2-dev \
    libxt-dev \
    libssl-dev

# Download and install ShinyServer (latest version)
RUN wget --no-verbose https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/VERSION -O "version.txt" && \
    VERSION=$(cat version.txt)  && \
    wget --no-verbose "https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/shiny-server-$VERSION-amd64.deb" -O ss-latest.deb && \
    gdebi -n ss-latest.deb && \
    rm -f version.txt ss-latest.deb

# Install R packages that are required
RUN R -e "install.packages(c('shiny', 'flexdashboard','rmarkdown','tidyverse','plotly','DT','drc','gridExtra','fitdistrplus'), repos='http://cran.rstudio.com/')"

# Copy configuration files into the Docker image
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /app /srv/shiny-server/
COPY /app/db /srv/shiny-server/app/

# Make the ShinyApp available at port 80
EXPOSE 80

CMD ["/usr/bin/shiny-server"]

Этот файл работает хорошо , если preprocessing_files запущены заранее, поэтому app/application_files может успешно прочитать app/db/processed_files. Как можно запустить этот скрипт в Dockerfile? Мне было бы просто написать интуитивное решение:

RUN bash -c "preprocessing.sh"

До инструкции ADD, но потом preprocessing_files не найдено. Если приведенная выше инструкция написана ниже ADD, а также WORKDIR app/, возникает та же ошибка. Я не могу понять, почему.

1 Ответ

1 голос
/ 10 июня 2019

Вы не можете выполнить код на хост-машине из Dockerfile. RUN команда выполняется внутри строящегося контейнера. Вы можете:

  • Скопируйте preprocessing_files внутри контейнера докера и запустите preprocessing.sh внутри контейнера (это увеличит размер контейнера)
  • Создание сценария makefile / build.sh, который запускает preprocessing.sh перед выполнением docker build
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...