にょっす速報🐮✋

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.txtmysite/ディレクトリにあることを確認する。
  • 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を構築する際に起こるエラーとその対策をまとめました。適切なディレクトリ構成と、各サービスの設定を確認することで、トラブルを最小限に抑えることができます。

);

コメント(0件)


トピックス