簡體   English   中英

Dockerize Django + mySql app: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)") 錯誤

[英]Dockerize Django + mySql app: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)") error

我正在嘗試對使用 mySql 的 Django 應用程序進行 docker 化,但我遇到了一些問題。 這是我第一次使用 Docker,所以可能有一些我不明白的基本內容。

按照一些在線教程,這是我的 Dockerfile:

FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN pip install --upgrade pip && pip install -r requirements.txt
RUN pip install mysqlclient
COPY . /code/

這是我的 docker-compose:

version: '3'

services: 
  db:
    image: mysql:8
    ports:
      - '3306:3306'
    environment:
       MYSQL_DATABASE: 'database_name'
       MYSQL_USER: 'django'
       MYSQL_PASSWORD: 'django-password'
       MYSQL_ROOT_PASSWORD: 'password'
    volumes:
      - .setup.sql:/docker-entrypoint-initbd.d/setup.sql

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    links: 
      - db 

設置.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('MYSQL_DATABASE', 'mysql-db'),
        'USER': os.environ.get('MYSQL_USER', 'mysql-user'),
        'PASSWORD': os.environ.get('MYSQL_PASSWORD', 'mysql-password'),
        'HOST': os.environ.get('MYSQL_DATABASE_HOST', 'db'),
        'PORT': os.environ.get('MYSQL_DATABASE_PORT', 3306),
    }
}

和.env:

MYSQL_DATABASE=database_name
MYSQL_USER=django
MYSQL_PASSWORD=django-password
MYSQL_ROOT_PASSWORD=password
MYSQL_DATABASE_HOST=db
MYSQL_DATABASE_PORT=3306

為了對應用程序進行 docker 化,我在 Windows 10 中使用 Docker 桌面。

我運行后:

docker-compose up -d

我看到兩個容器(db 和 web)都在運行,但是在 web 容器中我看到 django 無法連接到 mySql,因為它給了我錯誤:

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)")

我似乎有一些類似的線索,但它們並沒有幫助我理解問題出在哪里,或者如何解決它。 請幫我解釋一下這個問題,謝謝!

您是否嘗試過先啟動您的數據庫容器?

docker compose up db
docker compose build web
docker compose up

構建服務后,您將能夠在不首先啟動 db 容器的情況下進行 docker docker compose up因為容器將按照 docker-compose 文件中定義的depends_on順序啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM