首页 > 解决方案 > Mysql 没有连接 Docker

问题描述

我正在尝试在实时服务器上连接 mysql docker 容器,但它不工作

我的 docker-compose 文件是

  db:
    image: mysql:5.7
    restart: always
    env_file:
      - ./app/app/.env
    volumes:
      - ./mysql-data:/var/lib/mysql
    ports:
    - "3302:3306"

我的环境文件就像

MYSQL_PORT=3306 
MYSQL_DATABASE=mydb
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_ROOT_PASSWORD=root 

我的Django settings.py 是

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

gitlab CI 上的错误日志

Creating test database for alias 'default'...
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 227, in get_new_connection
    return Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/__init__.py", line 130, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/MySQLdb/connections.py", line 185, in __init__
    super().__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")

标签: djangodockergitlab

解决方案


在您的 docker-compose 文件中,您将端口 3306 映射到 3302。

这意味着您的数据库正在侦听 3306(在环境文件中配置),但是从容器外部,此端口被重定向到端口 3302。

您的 Django 应该在端口3302上连接到您的数据库,示例“setting.py”如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': mydb,
        'USER': root,
        'PASSWORD': root,
        'HOST': db,
        'PORT': 3302,
    }
}

推荐阅读