Dockerfile не может найти скрипт точки входа, который находится в другом каталоге - PullRequest
1 голос
/ 21 сентября 2019

У меня есть следующее расположение файлов для образа докера (salmon):

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

Мой сценарий входа в этом случае - run_salmon.py, который также использует другие сценарии .py вsrc/.Когда я пытаюсь построить образ докера через docker build -t salmon:pipeline . в docker/, я получаю сообщение об ошибке:

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

Как определить, где находится сценарий точки входа относительно рабочего каталога в файле docker?

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 Ответ

1 голос
/ 21 сентября 2019

Когда вы запускаете docker build -t salmon:pipeline . из каталога docker, вы указываете текущий каталог в качестве контекста для сборки.

Когда сборка запускается COPY src/run_salmon.py /, она пытается найти относительный путьв корень вашего контекста (т. е. salmon/docker/src/run_salmon.py), где файлы не существуют.

Лучше указывать корневой контекст в качестве каталога salmon, указав полный путь файла Dockerfile.с флагом -f.Запустите это из salmon каталога:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...