【问题标题】:Django on docker container error when trying to connect to local mysql database尝试连接到本地 mysql 数据库时 docker 容器上的 Django 错误
【发布时间】:2020-03-29 23:15:18
【问题描述】:

请帮帮我,

我有使用 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

【问题讨论】:

  • 你应该在你的 Docker Compose 中有一个 mysql 服务,目前你的应用只有一个 Python 容器。
  • 请说明你是如何配置mysql连接的。 docker容器可以访问宿主机上的mysql服务器,但不能通过localhost/127.0.0.1,需要使用宿主机ip

标签: mysql django docker docker-compose


【解决方案1】:

我发现 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"

这个方法对我有用,我希望这对所有人都有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2022-11-20
    • 2021-12-14
    相关资源
    最近更新 更多