У меня есть структура каталогов локального проекта, например:
config
test
docker-compose.yaml
DockerFile
pip-requirements.txt
src
app
app.py
Я пытаюсь использовать Docker для ускорения контейнера для запуска app.py. Простая в концепции, но это оказалось чрезвычайно трудным. Я храню свои файлы Docker в отдельной подпапке, потому что я планирую иметь большое количество различных сред, и я не хочу загромождать мою папку верхнего уровня десятками файлов, таких как Dockerfile.1
, Dockerfile.2
и т. д.
Мой docker-compose.yaml выглядит так:
version: '3'
services:
worker:
image: myname:mytag
build:
context: .
dockerfile: ./Dockerfile
volumes:
- ./src/app:/usr/local/myproject/src/app
Мой Dockerfile выглядит так:
FROM python:2.7
# Set the working directory.
WORKDIR /usr/local/myproject/src/app
# Copy the current directory contents into the container.
COPY src/app /usr/local/myproject/src/app
COPY pip-requirements.txt pip-requirements.txt
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r pip-requirements.txt
# Define environment variable
ENV PYTHONUNBUFFERED 1
CMD ["./app.py"]
Если я запускаю из каталога верхнего уровня моего проекта:
docker-compose -f config/test/docker-compose.yaml up
удается создать образ, но не удается при попытке запустить образ с ошибкой:
ERROR: for worker Cannot start service worker: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"./app.py\": stat ./app.py: no such file or directory": unknown
Если я проверяю файловую систему образа с помощью:
docker run --rm -it --entrypoint=/bin/bash myname:mytag
это правильно сбрасывает меня в /usr/local/myproject/src/app
. Однако этот каталог пуст, что объясняет ошибку времени выполнения. Почему это пусто? Разве оператор COPY
и volumes
не заполнили изображение кодом моего приложения?