Ошибка сборки Docker: такого файла или каталога нет - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь сделать базовое обучение докеру и создать образ.

Моя структура каталогов в настоящее время выглядит следующим образом:

/Documents/docker_test/
├── docker_python
├── hello_world.py

Файл docker_python - это имя файла Docker. hello_world.py - это базовый скрипт на python hello_world. Я пытаюсь запустить его по умолчанию при создании контейнера из образа.

Содержимое этого файла Docker выглядит следующим образом:

### Dockerfile 

# Created by Baktawar

# Pulling from base Python image 

FROM python:3.6.7-alpine3.6

# author of file
LABEL maintainer=”Baktawar”

# Set the working directory of the docker image 
WORKDIR /app
COPY . /app


# packages that we need
RUN pip install numpy && \
    pip install pandas && \
    pip install jupyter


EXPOSE 8888

ENTRYPOINT ["python"]

CMD ["hello_world.py"]

Когда я запускаю его, используя

docker_test$ docker build -t docker_python . 

unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /Documents/docker_test/Dockerfile: no such file or directory

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Чтобы сборка работала немедленно, ваша команда сборки должна быть:

docker build -f docker_python -t docker_python . 

По умолчанию команда сборки ищет файл с именем Dockerfile в предоставленном вами контексте сборки (в вашемна случай, если вы поставите . aka. текущий рабочий каталог).Если вы хотите переопределить это значение по умолчанию, используйте ключ -f и укажите свое имя файла.Обратите внимание, что Dockerfile всегда должен быть в контексте сборки.

Синтаксис docker build упрощен:

docker build -f <dockerfile> -t <imagetag> <buildcontext>

Если вы переименуете файл docker_python в своем проекте, чтобыпросто Dockerfile, вы можете просто собрать с помощью команды, которую вы уже пытаетесь:

docker build -t docker_python . 

Справочник по сборке стоит прочитать, если вы хотите узнать больше.

Обновление

Поскольку у вас возникли проблемы с LABEL сопровождающего, я включу для вас полный Dockerfile:

### Dockerfile 
# Created by Baktawar
# Pulling from base Python image 

FROM python:3.6.7-alpine3.6

# author of file
LABEL maintainer="Baktawar"

# Set the working directory of the docker image 
WORKDIR /app
COPY . /app


# packages that we need
RUN pip install numpy && \
    pip install pandas && \
    pip install jupyter

EXPOSE 8888

ENTRYPOINT ["python"]

CMD ["hello_world.py"]

Я только заменилдвойные кавычки в строке:

LABEL maintainer="Baktawar"

Обновление

Кажется, следующая проблема связана с простой установкой.И да, это действительно известная проблема на альпийском.Мне удалось решить эту проблему с помощью следующего Dockerfile:

### Dockerfile
# Created by Baktawar
# Pulling from base Python image

FROM python:3.6.7-alpine3.6

# author of file
LABEL maintainer="Baktawar"

# Set the working directory of the docker image
WORKDIR /app
COPY . /app

# Install native libraries, required for numpy
RUN apk --no-cache add musl-dev linux-headers g++

# Upgrade pip
RUN pip install --upgrade pip

# packages that we need
RUN pip install numpy && \
    pip install pandas && \
    pip install jupyter

EXPOSE 8888

ENTRYPOINT ["python"]

CMD ["hello_world.py"]

Очевидно, что numpy требует установки некоторых собственных библиотек.Я также обновил pip для вас, я получил предупреждение о версии.

На ваш вопрос, вы должны построить так:

docker build -f dockerfile -t docker_python .

Если вам Dockerfile присвоено имя dockerfile- ответ «да».Вы можете опустить переключатель -f, только если ваш Dockerfile назван точно Dockerfile.Он чувствителен к регистру.

0 голосов
/ 07 марта 2019

Эта ошибка возникает из-за того, что по умолчанию сборка Docker ожидает файл с именем Dockerfile .Поскольку ваш файл называется docker_python, вам нужно использовать параметр - file, -f , а затем передать имя вашего файла.

--file , -f     Name of the Dockerfile (Default is ‘PATH/Dockerfile’)

Проверьте Официальный DockerДокументация для получения дополнительной информации.

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