【Django】dockerコンテナ上で管理画面のアクセスエラーが発生した場合の対処法

Docker上でDjangoのコンテナを作成した際、管理画面(admin)へアクセスできない場合があります。

DockerコンテナでDjangoの構築でインストール成功画面は表示できたけど、管理画面にアクセスできない場合はこのページを参考にしてください。

今回の環境はCentOS8で実施しています。

$ cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 

Djangoの管理画面へのアクセスエラーが発生した場合に簡単にできる対応方法

httplocalhost:8000/admin

上記にアクセスし、Djangoの管理画面でアクセスエラーが発生する場合、「manage.py」のファイルがあるフォルダで、以下のコマンドを実施することで解消できます。

python3 manage.py migrate

or

python3 manage.py migrate

しかし、まれに以下のように、エラーが発生する場合があります。

$ python3 manage.py migrate
Traceback (most recent call last):
  File "manage.py", line 10, in main
    from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 16, in main
    ) from exc
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

この、エラーについて簡単に対応できる方法があるので以下でメモをしておきます。

エラーの対応方法は一時的にOS上でDjangoを「pip install」し再度「migrate」すること

結論から言うと、OS上でDjangoをインストールし、「migrate」コマンドを実行すると解消されます。
まずは、OS上でDjangoがインストールされているか確認します。

$ pip show django
WARNING: Package(s) not found: django

djangoがインストールされていないことで、うまく「migrate」コマンドが実行できなかったのが原因です。

なので以下で、Djangoをインストールします。

$ pip install django
Collecting django
  Downloading Django-3.0.5-py3-none-any.whl (7.5 MB)
     |████████████████████████████████| 7.5 MB 12.0 MB/s 
Requirement already satisfied: pytz in /usr/lib/python3.6/site-packages (from django) (2017.2)
Requirement already satisfied: sqlparse>=0.2.2 in /usr/local/lib/python3.6/site-packages (from django) (0.3.1)
Requirement already satisfied: asgiref~=3.2 in /usr/local/lib/python3.6/site-packages (from django) (3.2.4)
Installing collected packages: django
Successfully installed django-3.0.5
$ 

以下でDjangoがインストールされたことを確認します。

$ pip show django
Name: Django
Version: 3.0.5
Summary: A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
Home-page: https://www.djangoproject.com/
Author: Django Software Foundation
Author-email: foundation@djangoproject.com
License: BSD
Location: /usr/local/lib/python3.6/site-packages
Requires: sqlparse, pytz, asgiref
Required-by: 

DjangoをOS上にインストールし再度「migrate」を実行

上記で、OS上に「Django」をインストール後、再度以下コマンドを実行します。

$ python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
$ 

上記でうまくいけば、管理画面へアクセスできます。

「docker-compose.yml」へ「migrate」コマンドを記述しておく

Docker-composeを利用する方は以下のように、commandで「migrate」コマンドを事前に記述しておくと便利です。

$ cat docker-compose.yml
version: '3'

services:
  db:
    image: postgres
    ports:
            - "5432:5432"
    environment:
            POSTGRES_PASSWORD: postgres
  web:
    build: .
    command: python3 manage.py migrate
    command: python3  manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
$ 

以上がDocker上のDjangoコンテナへのアクセス画面へのエラーについてのまとめでした。
同じような事象が発生した場合は参考にしてください。




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUT US
げんき☆ひろき
インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!