django.db.utils.OperationalError:(2002年,“无法连接到'db'上的MySQL服务器(115)")) [英] django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")

查看:231
本文介绍了django.db.utils.OperationalError:(2002年,“无法连接到'db'上的MySQL服务器(115)"))的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

已经有人问过这个问题,但是没有一个答案对我有帮助.这是我的配置.我正在运行docker-compose并提供两项服务,一个是django中的Web应用程序,另一个是mariadb中的数据库.我可以使用此精确配置正常连接到本地数据库,仅将settings.py中的主机更改为localhost.当我运行 docker-compose up 时,Web服务在尝试连接到数据库后立即停止并返回此错误.

django.db.utils.OperationalError:(2002年,无法连接到'db'上的MySQL服务器(115)")

Dockerfile

  FROM python:3.7运行mkdir/appCOPY requierments.txt/app/WORKDIR/app运行pip install -r requierments.txt复制 ./应用程序/ 

docker-compose.yml

 版本:"3"服务:D b:图片:mariadb:10.2暴露:-3306端口:-"3306:3306"环境:MYSQL_DATABASE:'django_backend'MYSQL_USER:"django"MYSQL_PORT:"3306"MYSQL_PASSWORD:'mysql1234pass'MYSQL_ROOT_PASSWORD:'密码'网络:建造: .图片:backendblockchain_web数量:- .:/应用程序端口:-"8000:8000"取决于:- D b链接:- D b命令:-/bin/bash- -C-|睡觉10python3 manage.py迁移python3 manage.py运行服务器0.0.0.0:8000 

setting.py

  DATABASES = {'默认': {'ENGINE':'django.db.backends.mysql','NAME':'django_backend','USER':'django','PASSWORD':'mysql1234pass','HOST':'db','PORT':'3306'}} 

解决方案

您的 WEB 容器在数据库启动和运行之前启动,您需要使用以下方法或首先使用 docker-compose up db 手动启动数据库>

This has already been asked, but none of the answers have helped me. This is my configuration. Im running docker-compose with two services, a web app in django and the database in mariadb. I can connect normally to my local db with this exact configuration, only changing the host in settings.py to localhost. When i run docker-compose up, the web service stops immediately after trying to connect to the database, and return this error.

django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")

Dockerfile

FROM python:3.7

RUN mkdir /app

COPY requierments.txt /app/

WORKDIR /app

RUN pip install -r requierments.txt

COPY . /app/

docker-compose.yml

version: '3'

services:
  db:
    image: mariadb:10.2
    expose:
      - 3306
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: 'django_backend'
      MYSQL_USER: 'django'
      MYSQL_PORT: '3306'
      MYSQL_PASSWORD: 'mysql1234pass'
      MYSQL_ROOT_PASSWORD: 'password'

  web:
    build: .
    image: backendblockchain_web
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db
    command:
      - /bin/bash
      - -c
      - |
        sleep 10
        python3 manage.py migrate
        python3 manage.py runserver 0.0.0.0:8000

setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_backend',
        'USER': 'django',
        'PASSWORD': 'mysql1234pass',
        'HOST': 'db',
        'PORT': '3306'
    }
}

解决方案

your WEB containers starts before the DB is up and running , you need to wait for it using one of these methods or starting your DB first manually with docker-compose up db

这篇关于django.db.utils.OperationalError:(2002年,“无法连接到'db'上的MySQL服务器(115)"))的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆