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
対応
- poetry.lockファイルを削除する
- pyproject.tomlファイルに自分でライブラリ名とバージョンを追記する
- ローカルで事前に
poetry add pandas
等々をした方がいいのかも
- ローカルで事前に
- 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の運用がよろしくない等々があれば、教えていただけると幸いです。