我正在尝试为一个名为DECoN(versin 2.0.0)的工具构建一个Docker容器。为此,我正在执行以下步骤:
1.启动FROM
最新的bash镜像
RUN
下载该工具的源代码并将其解压缩
1.将WORKDIR
设置为工具的./Linux
值RUN
在Linux操作系统中找到的 * 现有 *setup.sh
脚本。
# syntax=docker/dockerfile:1
# start from a bash image
FROM bash:latest
# download files
RUN wget https://github.com/RahmanTeam/DECoN/archive/refs/tags/v2.0.0.tar.gz && \
tar -xf v2.0.0.tar.gz
# go to directory
WORKDIR DECoN-2.0.0/Linux
# run setup script
RUN setup.sh
# check directory content
RUN ls
您可以看到最后一个RUN ls
的脚本的存在。但是,没有找到该脚本,并且docker build返回以下错误:
docker build -t decon:2.0.0 .
...
/bin/sh: setup.sh: not found
The command '/bin/sh -c setup.sh' returned a non-zero code: 127
你知道我哪里做错了吗?我不明白为什么找不到剧本。我试过setup.sh
,./setup.sh
,/DECoN-2.0.0/Linux/setup.sh
,但没有工作。
编辑#1:这是bash脚本的内容:
#!/bin/bash
Rscript sessionInfo.R > setup.log 2>&1
2条答案
按热度按时间pprl5pva1#
要调试此类问题,请运行基本映像并在提示符下手动执行
Dockerfile
的命令:最后一行失败是因为,正如您所注意到的,它运行的
Rscript
在您的(非常小的)基础映像中不存在。Rscript
属于R语言,所以我再次尝试使用official R base image:这一次,脚本运行并创建以下
setup.log
:关于错误的R版本的警告可以通过使用
r-base:4.2.0
而不是r-base:latest
来避免(建议安全),但错误消息package 'BiocManager' is not available
仍然存在。日志中引用的URL仍然有效,
BiocManager
是必须安装在R中的包。由于我不是R语言的Maven,我在这里停止我的分析,希望它能有所帮助。**更新:**在Docker Hub中搜索,我发现了一些现成的镜像在
Dockerfile
中引用了RahmanTeam/DECoN
:这一个显式安装
BiocManager
:其他图像可能存在。
sf6xfgos2#
RUN ./setup.sh
是在当前WORKPERT中运行shell脚本的正确方法。如果脚本在路径上,则只能使用RUN setup.sh
。ls -al
将确认文件是否具有相应用户的r-x权限。否则,您将需要RUN chmod +x setup.sh
来确保它可以执行。1.由于您使用的是
bash:latest
,因此脚本不太可能引用一个不存在的shell,但是如果.sh文件的第一行引用了一个不存在的shell,它将返回一个错误。如果#!/bin/ash
,则确保ash
实际存在。1.同样,由于您是在容器中下载和解压缩,这是不可能的,但如果zip文件已在Windows计算机上处理,则.sh文件中可能有CRLF行结尾。由于Linux只识别LF,这意味着它将
#!/bin/bash<CR><LF>
处理为执行不存在的shell/bin/bash<CR>
的指令。下载文件并在编辑器(VSCode)中检查它,它可以告诉您结束样式。