きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Docker + Poetryでライブラリを追加する(cannot operation `poetry add library`)

Docker環境のPoetryで構築しているアプリケーションがありましたが、poetry add libraryではライブラリの追加ができませんでした。

今回の記事では、Docker環境のPoetryで構築しているアプリケーションに対してライブラリを追加して、poetry add libraryと同等の挙動させます。

環境

  • GitHub Codespaces
    • 2022/10/10時点
  • Docker
    • 20.10.18+azure-1

前提

Docker Composeファイルにて、サービス名をapiとしています。

動かなかった処理

本来Poetryであれば、こちらで済むのですが、うまくいきませんでした。chmod777にしようとしたのですが、rootディレクトリに書き込む関係で、Read-onlyは除外できませんでした。

$ poetry add pandas

# レスポンス
failed to create /root/.cache/pypoetry/cache/repositories/PyPI/_http/9/7/d/d/9/ec3f3c34427c-68eba740.67-179095377644821737

$ cd /root/.cache/pypoetry/cache/repositories/PyPI
$ chmod 777 *

# レスポンス
chmod: changing permissions of '_http': Read-only file system

対応

  1. poetry.lockファイルを削除する
  2. pyproject.tomlファイルに自分でライブラリ名とバージョンを追記する
    1. ローカルで事前にpoetry add pandas等々をした方がいいのかも
  3. Dockerのビルド時、または起動時にpoetryのインストールを行う
# ビルドしたイメージ上でpoetry installする
docker-compose run --entrypoint "poetry install" api

# なお、起動時のこちらは動かなかった
docker-compose run --entrypoint "poetry add pandas" api

ソースコード?

色々と複合して動かなかった可能性があるので、各自Cloneする等々での確認をお願いします。

終わりに

poetry install等々はできるので、addができないとは思いませんでした。

もしかしたら、オプション付けることで回避できるのかもしれないですし、Dockerfileが正しくないのかもしれません。ただ、一旦この方法で回避できたので、私はこのように回避しています。

もし、Dockerfileの運用がよろしくない等々があれば、教えていただけると幸いです。