Файлы COPY — рядом с Dockerfile — не работают и блокируют сборку докеров

Я пытаюсь создать док-контейнер с сервером mlflow внутри, с файлом toml поэзии для зависимости (два toml абсолютно одинаковы, это был просто способ выяснить) дерево
:

├── docker-entrypoint.sh
├── Dockerfile
├── files
│ └── pyproject.toml
├── git.sh
├── pyproject.toml
└── README.md

как видите, мой файл toml находится рядом с Dockerfile COPY pyproject.toml ./, тем не менее, не работает

Файл Docker

FROM python:3.6.10-alpine3.10 as base
LABEL maintainer=""

ENV PYTHONFAULTHANDLER 1 
ENV    PYTHONHASHSEED random 
ENV    PYTHONUNBUFFERED 1

ENV MLFLOW_HOME ./ 
ENV SERVER_PORT 5000   
ENV    MLFLOW_VERSION 0.7.0 
ENV    SERVER_HOST 0.0.0.0  
ENV    FILE_STORE ${MLFLOW_HOME}/fileStore  
ENV    ARTIFACT_STORE ${MLFLOW_HOME}/artifactStore 
ENV PIP_DEFAULT_TIMEOUT 100
ENV    PIP_DISABLE_PIP_VERSION_CHECK on
ENV    PIP_NO_CACHE_DIR  off 
ENV    POETRY_VERSION  1.0.0 

WORKDIR ${MLFLOW_HOME}

FROM base as builder

RUN apk update  \
    && apk add --no-cache make gcc musl-dev python3-dev libffi-dev openssl-dev subversion
#download project file from github  repo 
RUN    svn export https://github.com/MChrys/QuickSign/trunk/  \
    && pip install poetry==${POETRY_VERSION} \
    && mkdir -p ${FILE_STORE}  \
    && mkdir -p ${ARTIFACT_STORE}\
    && python -m venv /venv

COPY  pyproject.toml ./
RUN poetry export -f requirements.txt | /venv/bin/pip install -r  --allow-root-install /dev/stdin 

COPY . .
RUN poetry build && /venv/bin/pip install dist/*.whl

FROM base as final

RUN apk add --no-cache libffi libpq
COPY --from=builder /venv /venv
COPY docker-entrypoint.sh ./

EXPOSE $SERVER_PORT

VOLUME ["${FILE_STORE}", "${ARTIFACT_STORE}"]

CMD ["./docker-entrypoint.sh"]

команда сборки:

docker build - < Dockerfile

Я получаю эту ошибку:

Step 21/32 : COPY  pyproject.toml ./
COPY failed: stat /var/lib/docker/tmp/docker-builder335195979/pyproject.toml: no such file or   directory

pyproject.toml

requires = ["poetry>=1.0.0", "mlflow>=0.7.0", "python>=3.6"]
build-backend = "poetry.masonry.api"

[tool.poetry]
name = "Sign"
description = ""
version = "1.0.0"
readme = "README.md"
authors = [
  ""
]

license = "MIT"


[tool.poetry.dependencies]
python = "3.6"
numpy = "1.14.3"
scipy = "*"
pandas = "0.22.0"
scikit-learn = "0.19.1"
cloudpickle = "*"
mlflow ="0.7.0"
tensorflow = "^2.0.0"


[tool.poetry.dev-dependencies]

pylint = "*"
docker-compose = "^1.25.0"
docker-image-size-limit = "^0.2.0"
tomlkit = "^0.5.8"

docker-entrypoint.sh

#!/bin/sh

set -e

. /venv/bin/activate

mlflow server \
    --file-store $FILE_STORE \
    --default-artifact-root $ARTIFACT_STORE \
    --host $SERVER_HOST \
    --port $SERVER_PORT


если я добавлю RUN pwd; ls непосредственно перед первым COPY, я получу:

Step 20/31 : RUN pwd; ls
 ---> Running in e8ec36dd6ca8
/
artifactStore
bin
dev
etc
fileStore
home
lib
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
trunk
usr
var
venv
Removing intermediate container e8ec36dd6ca8
 ---> d7bba641bd7c
Step 21/31 : COPY  pyproject.toml ./
COPY failed: stat /var/lib/docker/tmp/docker-builder392824737/pyproject.toml: no such file or directory


person Chrys Bltr    schedule 24.12.2019    source источник
comment
Какая у вас команда сборки докера?   -  person Joachim Isaksson    schedule 24.12.2019
comment
Вы уверены, что ваш файл toml находится внутри вашего ENV MLFLOW_HOME ?   -  person Srini M    schedule 24.12.2019
comment
@SriniM, я только что отредактировал сообщение: команда сборки docker build - < Dockerfile и установлена ​​​​из каталога   -  person Chrys Bltr    schedule 24.12.2019
comment
Попробуйте RUN pwd; ls перед COPY pyproject.toml ./ для отладки   -  person AAber    schedule 24.12.2019
comment
@AAber, что я получил Step 20/31 : RUN pwd; ls ---> Running in e8ec36dd6ca8 / artifactStore bin dev etc fileStore home lib media mnt opt proc root run sbin srv sys tmp trunk usr var venv Removing intermediate container e8ec36dd6ca8 ---> d7bba641bd7c Step 21/31 : COPY pyproject.toml ./   -  person Chrys Bltr    schedule 24.12.2019


Ответы (1)


Попробуйте docker build -t test .

вместо docker build - < Dockerfile

person AAber    schedule 24.12.2019
comment
Это правильно; Можете ли вы сказать немного больше о том, почему это правильно? - person David Maze; 24.12.2019
comment
По умолчанию для команды сборки docker используется файл с именем Dockerfile в текущем каталоге, поэтому нет необходимости использовать синтаксис косвенного обращения (- ‹ Dockerfile). Важно предоставить тег для докера, который вы хотите создать, поэтому параметр -t используется для тегирования образа докера. - person AAber; 25.12.2019
comment
проблема возникает из-за самой поэзии, которая не справляется с установкой библиотеки машинного обучения из-за functools32 , которые пытаются установить с помощью python 2.7 - person Chrys Bltr; 31.12.2019