DockerのDjangoコンテナに対してpython manage.py shell_plusするときのメモ、正確にはdocker-composeで行っている。メモなので雑な記録。
app/settings.pyに下記追加してipythonを有効化、重要なのは後のIPYTHON_ARGUMENTS、ここにprofileの配置ディレクトリとして永続化される場所を渡しておくことで履歴や設定が保存される。
SHELL_PLUS = "ipython" IPYTHON_ARGUMENTS = [ '--profile-dir', '/app/ipython_profile' ]
Dockerfileはこんな感じ、中国なのでpip用にProxy設定追加してる
FROM python:3.6 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 ENV http_proxy http://192.168.1.X:8080 ENV https_proxy http://192.168.1.X:8080 RUN mkdir /app WORKDIR /app ADD requirements.txt /app/ RUN pip install --upgrade pip RUN pip install -r requirements.txt ADD . /app/
Django==2.0.4 uwsgi==2.0.17 PyMySQL==0.8.0 django-extensions==2.2.8 ipython==5.9.0
あと、~/.docker/config.jsonに下記を書いておくとCtrl-pがDockerに横取りされて履歴アクションがおかしくなるの(Ctrl-p2回押し問題)を防げる。これはdjangoのshellでもbashでも同じ
{ "detachKeys": "ctrl-\\" }
で、下記で起動する。オプションのCOLUMNSやLINESオプションはコンソール上で表示がおかしくなったりする問題の対応。
docker-compose run -e COLUMNS="`tput cols`" -e LINES="`tput lines`" python-container python manage.py shell_plus --print-sql
参考サイト:
- django-extensions/shell_plus.py at 02c2fbf1b393782adfeececc0719e4e155ea6208 · django-extensions/django-extensions
https://github.com/django-extensions/django-extensions/blob/02c2fbf1b393782adfeececc0719e4e155ea6208/django_extensions/management/commands/shell_plus.py#L127 - docker-compose で Ctrl-p 2回押し問題 (detach-keys の問題) を解決するには – Qiita
https://qiita.com/vitway/items/bbed028d9e469e9991c3 - Strange terminal behaviour inside docker · Issue #33794 · moby/moby
https://github.com/moby/moby/issues/33794#issuecomment-380969582