如何将当前工作目录挂载到Docker容器中?

5
我正在尝试将当前工作目录挂载到Docker容器上,但是似乎不起作用。以下是我的Dockerfile:
FROM ubuntu:14.04.3
MAINTAINER Upendra Devisetty

RUN apt-get update && apt-get install -y g++ \
                make \
                git \
                zlib1g-dev \
                python \
                wget \
                curl \
                python-matplotlib

ENV BINPATH /usr/bin
ENV HISAT2GIT https://upendra_35@bitbucket.org/upendra_35/evolinc.git

RUN git clone "$HISAT2GIT"
RUN chmod +x evolinc/evolinc-part-I.sh && cp evolinc/evolinc-part-I.sh $BINPATH
RUN wget -O- http://cole-trapnell-lab.github.io/cufflinks/assets/downloads/cufflinks-2.2.1.Linux_x86_64.tar.gz | tar xzvf -
RUN wget -O- https://github.com/TransDecoder/TransDecoder/archive/2.0.1.tar.gz | tar xzvf -
RUN wget -O- http://seq.cs.iastate.edu/CAP3/cap3.linux.x86_64.tar | tar vfx -
RUN curl ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.2.31+-x64-linux.tar.gz > ncbi-blast-2.2.31+-x64-linux.tar.gz
RUN tar xvf ncbi-blast-2.2.31+-x64-linux.tar.gz
RUN wget -O- http://ftp.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/q/qu/quast/quast-3.0.tar.gz | tar zxvf -
RUN curl -L http://cpanmin.us | perl - App::cpanminus
RUN cpanm URI/Escape.pm

ENV PATH /CAP3/:$PATH
ENV PATH /ncbi-blast-2.2.31+/bin/:$PATH
ENV PATH /quast-3.0/:$PATH
ENV PATH /cufflinks-2.2.1.Linux_x86_64/:$PATH
ENV PATH /TransDecoder-2.0.1/:$PATH
ENTRYPOINT ["/usr/bin/evolinc-part-I.sh"]
CMD ["-h"]

当我运行以下命令将当前工作目录挂载以确保一切正常时,我发现所有这些依赖项都被安装在当前工作目录中。
docker run --rm -v $(pwd):/working-dir -w /working-dir ubuntu/evolinc:2.0 -c cuffcompare_out_annot_no_annot.combined.gtf -g Brassica_rapa_v1.2_genome.fa -r Brassica_rapa_v1.2_cds.fa -b TE_RNA_transcripts.fa

我认为它们应该只安装在容器上,只有输出将在当前工作目录中生成。抱歉,我对Docker非常陌生,需要一些帮助...


我对你的期望感到困惑。你期望发生什么?这听起来更依赖于应用程序如何使用当前工作目录。 - Andy Shinn
通过将目录绑定到容器中,您明确地使容器中的进程可以访问主机上的该目录。主机上的目录和容器内部的目录因此是相同的目录;因此,容器内部写入该目录的任何内容实际上都会写入主机上的目录。 - thaJeztah
如果您想要“debug”过程以查看其是否有效,您可以考虑使用 docker exec -it <container-name> bash 作为容器内的辅助进程打开一个交互式 shell。 - thaJeztah
1个回答

3
在Docker中挂载卷(-v)可以使容器与主机共享目录/卷。因此,更改卷实际上是更改已挂载的目录。如果你想要复制一些文件而不是指向它们,你可能需要构建自己的容器并使用COPYADD指令。 在Dockerfile中,`COPY`和`ADD`命令有什么区别?

3
使用-v的示例将完善答案。 - rjurney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接