简体   繁体   English

如何在 docker 文件中包含 shell 脚本套件

[英]How to include shell script suite in docker file

I am trying to create a docker image for BBMAP ( https://sourceforge.net/projects/bbmap/files/latest/download ) shell script suite available online along with samtools and picard.jar.我正在尝试为BBMAP ( https://sourceforge.net/projects/bbmap/files/latest/download ) shell 脚本套件创建一个BBMAP映像, BBMAP脚本套件可与 samtools 和 picard.jar 一起在线使用。 I was able to run samtools and picard, but for some reason I am not able to add bbmap below.我能够运行 samtools 和 picard,但由于某种原因,我无法在下面添加bbmap Can someone please let me know what I am missing here?有人可以让我知道我在这里缺少什么吗?

I am trying to add shell scripts to bin to run them as executables.我正在尝试将 shell 脚本添加到 bin 以将它们作为可执行文件运行。 In my docker file below, this is where I need help:在我下面的 docker 文件中,这是我需要帮助的地方:

&& wget -q https://sourceforge.net/projects/bbmap/files/latest/download \
&& tar -xjvf /tmp/download \
&& cp -av /tmp/bbmap/* /usr/bin/ \

Dockerfile: Dockerfile:

FROM openjdk:8-jre
LABEL maintainer="AN <XXX@wustl.edu>"

LABEL org.label-schema.schema-version="1.0"
# LABEL org.label-schema.build-date=$BUILD_DATE
LABEL org.label-schema.name="an/samtofastq"
LABEL org.label-schema.description="Image for Reverting .bam"

ENV SAMTOOLS_VERSION 1.9
ENV PICARD_VERSION 2.20.8

WORKDIR /tmp

RUN apt-get update -y \
&& apt-get install --no-install-recommends -y \
 make \
 gcc \
 g++ \
 libz-dev \
 libbz2-dev \
 liblzma-dev \
 ncurses-dev \
 bc \
 libnss-sss \
 time \
&& cd /tmp \
&& wget -q https://github.com/samtools/samtools/releases/download/${SAMTOOLS_VERSION}/samtools-${SAMTOOLS_VERSION}.tar.bz2 \
&& tar xjvf samtools-${SAMTOOLS_VERSION}.tar.bz2 \
&& cd /tmp/samtools-${SAMTOOLS_VERSION}/ \
&& make \
&& cp -av /tmp/samtools-${SAMTOOLS_VERSION}/samtools /usr/bin/ \
&& wget -q -O /usr/bin/picard.jar https://github.com/broadinstitute/picard/releases/download/${PICARD_VERSION}/picard.jar \
&& wget -q https://sourceforge.net/projects/bbmap/files/latest/download \
&& tar -xjvf /tmp/download \
&& cp -av /tmp/bbmap/* /usr/bin/ \
&& ln -sf /usr/share/zoneinfo/America/Chicago /etc/localtime \
&& echo "America/Chicago" > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& apt-get clean all \
&& rm -rfv /var/lib/apt/lists/* /tmp/* /var/tmp/* 

 

# COPY ./entrypoint.sh /usr/local/bin/
ENV PICARD /usr/bin/picard.jar

## Add ENV for Shell scripts from BBMAP
# ENV DEMUX /usr/bin/demuxbyname.sh
# ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/bin/bash"]

This is the error I am getting:这是我得到的错误:

tar (child): /tmp/download: Cannot open: No such file or directory                                                      
tar (child): Error is not recoverable: exiting now                                                                      
tar: Child returned status 2                                                                                            
tar: Error is not recoverable: exiting now  

Earlier in your script, you run:在脚本的前面,您运行:

cd /tmp/samtools-${SAMTOOLS_VERSION}/ 

So when you run this:所以当你运行这个时:

wget -q https://sourceforge.net/projects/bbmap/files/latest/download

The resulting file is:生成的文件是:

/tmp/samtools-${SAMTOOLS_VERSION}/download

That means that when you run your tar command:这意味着当您运行tar命令时:

tar -xjvf /tmp/download

...it doesn't find the file because it isn't in /tmp . ...它没有找到该文件,因为它不在/tmp

Either change the path on the tar command, or add a cd /tmp to your script before downloading the file.要么更改tar命令的路径,要么在下载文件之前将cd /tmp添加到脚本中。 Or pass something like -O /tmp/download.tar to your wget invocation.或者将诸如-O /tmp/download.tar类的内容-O /tmp/download.tar给您的wget调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM