Dockerfile无法找到可执行脚本(没有此类文件或目录)

时间:2019-06-10 16:17:23

标签: docker shiny-server

我正在编写Dockerfile以便为Web服务器(更准确地说是闪亮的服务器)创建映像。它运行良好,但是它依赖于一个不随包一起分发的巨大数据库文件夹(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 个答案:

答案 0 :(得分:1)

您无法从Dockerfile在主机上执行代码。 RUN命令在正在构建的容器内执行。您可以:

  • preprocessing_files复制到docker容器中并在容器中运行preprocessing.sh(这会增加容器的大小)
  • 创建一个makefile / build.sh脚本,该脚本在执行preprocessing.sh之前启动docker build