エラー
通常の方法でコンテナにマウントして使おうとするとエラーが吐かれる。
$ python -m venv .venv
Error: [Errno 71] Protocol error: 'lib' -> '/app/.venv/lib64'
原因
venv の使用時にシンボリックリンクを発行していて、ローカルのマウント時にこれを共有してしまっていることが原因
解決方法
DockerでVolumeをマウントするとき一部を除外する方法 を使って、シンボリックリンクが張られる箇所とのマウントから除外する。
下記のコマンドでは、{作業ディレクトリ}/.venv/ 配下にシンボリックリンクが貼られることになるので、ここを除外する。
python -m venv .venv
docker-compose.yml の一部
version: "3.7"
services:
app:
...
volumes:
- {作業ディレクトリ}/.venv/
docker-compose.yml
全体のサンプル
version: "3.7"
services:
app:
build: ./app/
working_dir: /app
volumes:
- ./app:/app:cached
- /app/__pycache__
- /app/.venv/
- /app/.tox/ # tox 用
environment:
- FLASK_ENV=development
ports:
- "5000:5000"