I’ve been using Docker with pipenv for my data science deployment setup and now I want to change to Poetry. My Dockerfile is:
FROM python:3.8-alpine3.13 ENV POETRY_VIRTUALENVS_CREATE=false POETRY_VERSION=1.1.11 RUN apk add --no-cache python3-dev gcc libc-dev musl-dev openblas gfortran build-base postgresql-libs postgresql-dev libffi-dev && pip install poetry COPY pyproject.toml poetry.lock ./ RUN poetry export -f requirements.txt --output requirements.txt && sed -i 's/^-e //' requirements.txt USER root RUN apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y # install dependencies from requirements.txt RUN pip install --no-cache-dir --user -r requirements.txt COPY . . CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
My pyproject.toml
:
[tool.poetry] name = "" version = "1.0.0" description = "" authors = [""] [tool.poetry.dependencies] python = "^3.8" ... # lots of libraries, omitted here [tool.poetry.dev-dependencies] black = "*" ipykernel = "6.*" ipython = "7.*" isort = "5.*" jupyter = "*" pytest = "6.*" pre-commit = "2.*" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
This is based on other Dockerfiles that I found on StackOverflow. I run into the following problem:
Step 7/10 : RUN apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y ---> Running in 447ffb83d555 /bin/sh: apt-get: not found The command '/bin/sh -c apt-get update && apt-get install -y --no-install-recommends python3-dev gcc libc-dev musl-dev openssh-client git libpq-dev && apt-get clean -y' returned a non-zero code: 127 Running containerdocker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "jupyter": executable file not found in $PATH: unknown. ERRO[0000] error waiting for container: context canceled make: *** [Makefile:6: jupyter_notebook] Error 127
So this looks like the Poetry is not used, where Jupyter is installed, and therefore it cannot be found. How can I fix this?
Advertisement
Answer
Based on Asgeer’s answer I managed to fix the Dockerfile. However, using Alpine turned out to be pretty impossible and the final solution is:
FROM jupyter/scipy-notebook:latest ENV POETRY_VIRTUALENVS_CREATE=false POETRY_VERSION=1.1.11 USER root RUN apt-get update && apt-get --yes install apt-utils && apt-get --yes install curl RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python - ENV PATH "/home/jovyan/.local/bin:$PATH" # install dependencies COPY pyproject.toml poetry.lock ./ RUN poetry install --no-interaction --no-ansi COPY . . CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]