繁体   English   中英

尝试连接到本地 mysql 数据库时 docker 容器上的 Django 错误

[英]Django on docker container error when trying to connect to local mysql database

请帮我,

我有使用 docker-compose 在 docker 容器上运行的 django 应用程序,但是在尝试连接到本地机器上的 mysql 数据库时出现错误。

错误信息是这样的: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

我的 docker-compose.yml 文件是这样的:

 version: '3'

 services:
   web:
     container_name: web
     build: .
     command: python manage.py runserver 0.0.0.0:8000
     volumes:
       - .:/code
     ports:
       - "8000:8000"

我的 Dockerfile 是这样的:

FROM python:3

ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN apt-get update
RUN apt-get install python3-dev default-libmysqlclient-dev -y
RUN pip install pip -U
RUN pip install -r requirements.txt

我发现了 Django 容器如何访问在主机上运行的 MySQL 数据库,

  1. 如果您在 Windows 上运行,请确保您的网络配置文件处于Private mode
  2. 像这样创建一个新的 Mysql 用户:

    mysql > CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
    mysql > GRANT ALL PRIVILEGES ON . TO 'monty'@'localhost'WITH GRANT OPTION;
    mysql > CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
    mysql > GRANT ALL PRIVILEGES ON . TO 'monty'@'%' WITH GRANT OPTION;

    根据需要将'monty'替换为用户名。
    'localhost'替换为您的主机 IP 地址,例如。 192.168.1.50
    根据需要将'some_pass'替换为密码。

  3. 在 Django settings.py 文件中设置数据库设置如下:

    数据库 = {

     'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'monitoring', # your database name 'USER': 'user1', # username that you just create above 'PASSWORD': 'root', # user password that you just create above 'HOST': '192.168.1.50', #your host IP Address where your mysql database run 'PORT': '3306', }}
  4. 将 my.cnf 文件中的bind-address = "127.0.0.1"替换为bind-address = "0.0.0.0"

这种方法对我有用,我希望这对所有人有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM