Dockerfile找不到另一个目录中的入口点脚本

时间:2019-09-20 21:16:48

标签: docker

我对docker映像(salmon)具有以下文件排列:

salmon
    ├── docker
    │   └── Dockerfile
    └── src
        ├── align_utils.py
        ├── job_utils.py
        ├── run_salmon.py
        └── s3_utils.py

在这种情况下,我的入口点脚本是run_salmon.py,它也使用了src/中的其他.py脚本。当我尝试通过docker build -t salmon:pipeline .中的docker/构建docker映像时,出现错误:

COPY failed: stat /var/lib/docker/tmp/docker-builder013511307/src/run_salmon.py: no such file or directory

如何确定入口点脚本相对于dockerfile中工作目录的位置?

Dockerfile:

# Use Python base image from DockerHub 
FROM python:2.7 

# INSTALL CMAKE
RUN apt-get update && apt-get install -y sudo \
    && sudo apt-get update \
    && sudo apt-get install -y \
    cmake \
    wget 

#INSTALL BOOST
RUN wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz \
    && mv boost_1_66_0.tar.gz /usr/local/bin/ \
    && cd /usr/local/bin/ \
    && tar -xzf boost_1_66_0.tar.gz \
    && cd ./boost_1_66_0/ \
    && ./bootstrap.sh \
    && ./b2 install

#INSTALL SALMON
RUN wget https://github.com/COMBINE-lab/salmon/releases/download/v0.14.1/salmon-0.14.1_linux_x86_64.tar.gz \
    && mv salmon-0.14.1_linux_x86_64.tar.gz /usr/local/bin/ \
    && cd /usr/local/bin/ \
    && tar -xzf salmon-0.14.1_linux_x86_64.tar.gz \
    && cd salmon-latest_linux_x86_64/ 

ENV PATH=$PATH:/usr/local/bin/salmon-latest_linux_x86_64/bin/

# Copy files to root directory of a Docker
WORKDIR /
COPY src/run_salmon.py /
COPY src/s3_utils.py / 
COPY src/job_utils.py / 
COPY src/align_utils.py / 

ENTRYPOINT ["python", "/run_salmon.py"]

1 个答案:

答案 0 :(得分:1)

docker build -t salmon:pipeline .目录内部运行docker时,您将当前目录指定为构建的上下文。

在运行COPY src/run_salmon.py /时,它会尝试查找相对于您的上下文根(即salmon/docker/src/run_salmon.py)的路径,该路径不存在文件。

最好将您的根上下文指定为salmon目录,并使用-f标志指定Dockerfile的完整路径。从salmon目录中运行此文件:

docker build -t salmon:pipeline -f docker/Dockerfile .