dockerコンテナ作成時のpoetry installについて
Q&A
Closed
前置き
Docker初学者なため、的はずれなことを書いている可能性があります
解決したいこと
GtiHub CodespacesでPoetry開発環境を自動でセットアップされるように作成したい
発生している問題・エラー
Dockerfile内でpoetry install
を実行しているにも関わらず、
コンテナビルド後poetry run 〇〇
を実行できない(Command not foundになる)
poetry install
を手動で実行したら使用可能になるが、自動で環境がセットアップされるようにしたい
root@codespaces:/workspaces/tutorial# poetry run isort --version
Creating virtualenv tutorial-31QiwWn4-py3.11 in /root/.cache/pypoetry/virtualenvs
Command not found: isort
構成
使用した環境
- GitHub Codespaces
- python3.11
ディレクトリ
/workspaces/tutorial
|--.devcontainer
| |--devcontainer.json
|--.gitignore
|--Dockerfile
|--poetry.lock
|--pyproject.toml
|--src
| |--app.py
FROM python:3.11
RUN pip install poetry
# install python package
COPY ./pyproject.toml* ./poetry.lock* ./
RUN poetry install
[tool.poetry]
name = "tutorial"
version = "0.1.0"
description = ""
authors = [""]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
black = "^23.12.1"
isort = "^5.13.2"
fastapi = "^0.109.0"
alembic = "^1.13.1"
SQLAlchemy = "^2.0.25"
pyproject-flake8 = "^6.1.0"
uvicorn = "^0.26.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
ビルドログ
#8 [dev_container_auto_added_stage_label 3/4] COPY ./pyproject.toml* ./poetry.lock* ./
2024-01-22 01:20:56.610Z: #8 DONE 0.2s
2024-01-22 01:20:56.774Z:
#9 [dev_container_auto_added_stage_label 4/4] RUN poetry install
2024-01-22 01:20:57.321Z: #9 0.698 Creating virtualenv tutorial-il7asoJj-py3.11 in /root/.cache/pypoetry/virtualenvs2024-01-22 01:20:57.328Z:
2024-01-22 01:20:57.819Z: #9 1.196 Installing dependencies from lock file2024-01-22 01:20:57.833Z:
2024-01-22 01:20:57.929Z: #9 1.307 2024-01-22 01:20:57.932Z:
2024-01-22 01:20:58.093Z: #9 1.307 Package operations: 28 installs, 0 updates, 0 removals
2024-01-22 01:20:58.100Z: #9 1.307
#9 1.308 • Installing idna (3.6)
#9 1.314 • Installing sniffio (1.3.0)
#9 1.315 • Installing typing-extensions (4.9.0)
2024-01-22 01:20:58.326Z: #9 1.704 • Installing annotated-types (0.6.0)
2024-01-22 01:20:58.441Z: #9 1.706 • Installing anyio (4.2.0)
2024-01-22 01:20:58.447Z: #9 1.706 • Installing markupsafe (2.1.3)2024-01-22 01:20:58.465Z:
#9 1.715 • Installing greenlet (3.0.3)
#9 1.717 • Installing mccabe (0.7.0)
#9 1.719 • Installing pycodestyle (2.11.1)
#9 1.760 • Installing pydantic-core (2.14.6)
#9 1.819 • Installing pyflakes (3.1.0)
2024-01-22 01:20:58.682Z: #9 2.061 • Installing click (8.1.7)
2024-01-22 01:20:58.789Z: #9 2.063 • Installing flake8 (6.1.0)
2024-01-22 01:20:58.791Z: #9 2.065 • Installing mako (1.3.0)
#9 2.065 • Installing mypy-extensions (1.0.0)
#9 2.066 • Installing h11 (0.14.0)
#9 2.078 • Installing packaging (23.2)
#9 2.129 • Installing pathspec (0.12.1)
#9 2.168 • Installing platformdirs (4.1.0)
2024-01-22 01:20:58.989Z: #9 2.213 • Installing pydantic (2.5.3)
#9 2.214 • Installing sqlalchemy (2.0.25)
#9 2.217 • Installing starlette (0.35.1)
2024-01-22 01:20:59.130Z: #9 2.508 • Installing alembic (1.13.1)
2024-01-22 01:20:59.289Z: #9 2.511 • Installing black (23.12.1)
#9 2.511 • Installing fastapi (0.109.0)
#9 2.511 • Installing pyproject-flake8 (6.1.0)
#9 2.514 • Installing isort (5.13.2)
#9 2.516 • Installing uvicorn (0.26.0)2024-01-22 01:20:59.295Z:
2024-01-22 01:20:59.396Z: #9 2.775
2024-01-22 01:20:59.548Z: #9 2.775 Installing the current project: tutorial (0.1.0)
#9 2.776
2024-01-22 01:20:59.551Z: #9 2.776 The current project could not be installed: [Errno 2] No such file or directory: '/README.md'
#9 2.776 If you do not want to install the current project use --no-root
2024-01-22 01:20:59.965Z: #9 DONE 3.3s
poetry install
は正常に実行できている様に見える。
が、作成されているはずのvirtualenvはビルド後に存在しない
(poetry env list
を実行しても表示されない)
自分で試したこと
poetryに仮想環境を作らせないように設定するとうまく行った
# install python package
COPY ./pyproject.toml* ./poetry.lock* ./
# Poetryが仮想環境を生成しないようにする
RUN poetry config virtualenvs.create false
RUN poetry install
Docker上であればこの設定で基本は問題ない?
とは思われるのだが、なぜ仮想環境を作成した場合にうまく行かないのかを知りたい。