Docker環境でのDjango + MySQL + uWSGI + Nginx構築 ~ Docker 環境で MySQL に接続できない場合のトラブルシューティング
この記事の目次
はじめに
Dockerを用いてDjango、MySQL、uWSGI、Nginxの環境を構築する際に遭遇したエラーと、その解決策についてまとめます。
環境構成
プロジェクトのディレクトリ構成は以下のようになっています。
project_root/ │── docker-compose.yml │── mysite/ │ │── Dockerfile │ │── requirements.txt │ │── mysite/ # Djangoプロジェクト │── nginx/ │ │── nginx.conf │── mysql/ │ │── .env │── static/
docker-compose.yml
version: "3" services: nginx: image: nginx:1.13 ports: - "8000:8000" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params - ./static:/static depends_on: - django mysql: platform: linux/x86_64 image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "3306:3306" env_file: - ./mysql/.env volumes: - ./mysql:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d django: build: ./mysite command: uwsgi --socket :8001 --module mysite.wsgi --py-autoreload 1 --logto /tmp/mylog.log volumes: - ./mysite:/code - ./static:/static expose: - "8001" env_file: - ./django/.env depends_on: - mysql
mysite/Dockerfile
FROM python:3.11 ENV PYTHONUNBUFFERED 1 WORKDIR /code COPY requirements.txt /code/ RUN pip install --upgrade pip setuptools wheel RUN pip install -r requirements.txt COPY . /code/
トラブルシューティング
1. failed to solve: rpc error: code = Unknown desc = failed to compute cache key: "/requirements.txt" not found: not found
原因
DockerfileのCOPY requirements.txt /code/
の部分で、requirements.txt
が正しいパスに存在しない。
解決策
requirements.txt
がmysite/
ディレクトリにあることを確認する。COPY
のパスを修正する(例:COPY ./mysite/requirements.txt /code/
)。
2. Cannot connect to the Docker daemon at unix:///var/run/docker.sock
原因
Dockerデーモンが起動していないか、権限が不足している。
解決策
- Dockerを起動する:
sudo systemctl start docker
- ユーザーを
docker
グループに追加する:sudo usermod -aG docker $USER
(その後ログアウト&ログイン)
3. ERROR [4/6] COPY requirements.txt /code/
原因
requirements.txt
がDockerビルドコンテキストに存在しない。
解決策
docker-compose build
を実行するディレクトリがdocker-compose.yml
のあるルートであることを確認する。
4. Can't connect to local server through socket '/run/mysqld/mysqld.sock'
原因
MySQLコンテナが正しく起動していない。
解決策
docker ps
でMySQLコンテナの状態を確認する。docker-compose up -d mysql
でMySQLコンテナを個別に起動する。- MySQLのログを確認:
docker logs <mysql_container_id>
まとめ
Docker環境でDjango + MySQL + uWSGI + Nginxを構築する際に起こるエラーとその対策をまとめました。適切なディレクトリ構成と、各サービスの設定を確認することで、トラブルを最小限に抑えることができます。