收到 Docker 运行 错误文件不存在或不可读。 getwd()=='/'?

Getting Docker run error File does not exist or is non-readable. getwd()=='/'?

我在 运行 docker run ... 时遇到与读取文件相关的错误,而闪亮的应用程序在 Rstudio 中运行良好。

所有数据(输入表)、闪亮的应用程序 .R 文件和 Docker 文件都在同一文件夹中。

我在 docker 运行:

中出错的闪亮应用程序的第一行

gene<-data.frame(data.table::fread('PCR_Gene_CP.GZ.csv'))

和Docker文件是:

# get shiny packages image
FROM rocker/shiny:latest

#system libraries of general use
## install debian packages
RUN apt-get update -qq && apt-get -y --no-install-recommends install libxml2-dev libcairo2-dev 
libsqlite3-dev libmariadbd-dev libpq-dev libssh2-1-dev unixodbc-dev libcurl4-openssl-dev libssl-dev

## update system libraries
RUN apt-get update && apt-get upgrade -y && apt-get clean

# install R packages required 
# (change it dependeing on the packages you need)
RUN R -e "install.packages(pkgs=c('shiny','ggplot2','data.table','DT','dplyr','tidyr','tibble','VennDiagram'), repos='http://cran.rstudio.com/')"

COPY /app.R /app.R

# expose port
EXPOSE 3838

# run app on container start
CMD ["R", "-e", "shiny::runApp('/app.R', host = '0.0.0.0', port = 3838)"]

运行 Docker 构建,运行 和日志:

docker build -t enhancer .
docker run -p 8081:3838 --name enhancer -d enhancer

docker logs -t enhancer

你的大部分 Dockerfile 都在进行包安装(来自 Linux 或者我假设是 R 模块的存储库)。您从自己的代码目录中唯一复制的是这个文件:

COPY /app.R /app.R

由于 csv 文件未复制到图像中,因此它不存在,因此您的应用程序无法打开它。

如果你只需要一个数据文件,你可以通过改变你的复制行来解决这个问题:

COPY app.R PCR_Gene_CP.GZ.csv /

这会将 R 文件和 cvs 文件都复制到图像中的 /

如果其他数据文件(或其他任何东西)必须在图像中,您可以在那里添加更多文件。您也可以复制所有内容:

COPY . /

或者您可以使用各种通配符来匹配多个文件。可以在此处找到更多文档:

https://docs.docker.com/engine/reference/builder/#copy