【问题标题】:django-mysql connection inside docker-compose giving connection refuseddocker-compose 内的 django-mysql 连接拒绝连接
【发布时间】:2019-05-05 23:09:42
【问题描述】:

Dockerfile

FROM python:3.6
ENV PYTHONUNBUFFERED 1
WORKDIR /usr/src/govtcareer_api

COPY ./ /usr/src/govtcareer_api

RUN pip install -r requirements.txt

CMD ["/bin/bash"]

docker-compose.yml

version: "3"

services:
  govtcareer_api:
    container_name: govtcareer
    build: .
    command: "bash -c 'python manage.py migrate --no-input && python manage.py runserver 0.0.0.0:8000'"
    working_dir: /usr/src/govtcareer_api
    ports:
      - "8000:8000"
    volumes:
      - ./:/usr/src/govtcareer_api
    links:
      - db

  db:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=Thinkonce
      - MYSQL_USER=soubhagya
      - MYSQL_PASSWORD=Thinkonce
      - MYSQL_DATABASE=freejobalert
    ports:
      - "3306:3306"

django 数据库连接:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'freejobalert',
        'USER': 'soubhagya',
        'PASSWORD': 'Thinkonce',
        'HOST': 'localhost',
        'PORT': '3306',
    },
}

错误:

    govtcareer        |     include_deployment_checks=include_deployment_checks,
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 59, in _run_checks
    govtcareer        |     issues = run_checks(tags=[Tags.database])
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/core/checks/registry.py", line 71, in run_checks
    govtcareer        |     new_errors = check(app_configs=app_configs)
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/core/checks/database.py", line 10, in check_database_backends
    govtcareer        |     issues.extend(conn.validation.check(**kwargs))
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/validation.py", line 9, in check
    govtcareer        |     issues.extend(self._check_sql_mode(**kwargs))
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode
    govtcareer        |     with self.connection.cursor() as cursor:
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
    govtcareer        |     return self._cursor()
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
    govtcareer        |     self.ensure_connection()
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    govtcareer        |     self.connect()
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    govtcareer        |     raise dj_exc_value.with_traceback(traceback) from exc_value
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    govtcareer        |     self.connect()
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    govtcareer        |     self.connection = self.get_new_connection(conn_params)
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 227, in get_new_connection
    govtcareer        |     return Database.connect(**conn_params)
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/MySQLdb/__init__.py", line 85, in Connect
    govtcareer        |     return Connection(*args, **kwargs)
    govtcareer        |   File "/usr/local/lib/python3.6/site-packages/MySQLdb/connections.py", line 204, in __init__
    govtcareer        |     super(Connection, self).__init__(*args, **kwargs2)
    govtcareer        | django.db.utils.OperationalError: (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such file or directory")')

这是我的代码。

我正在尝试将 django 与 mysql 集成到 docker 容器中 但显示连接被拒绝托管。

我需要使用环境变量在 docker 中使用它吗?

与我用于 mongodb 的方式相同,但在 mysql 中我遇到了这个问题。

请查看我的代码。

【问题讨论】:

  • 您的db 容器的日志说什么? MySQL 是否确实启动干净了?
  • 是的,我也可以访问 docker 内部的 mysql shell。

标签: mysql django docker


【解决方案1】:

从您的docker-compose.yml 中删除links

links:
  - db

您不需要它们 - docker 将构建一个网络并在其中包含您声明的所有服务。

【讨论】:

  • 什么是ping db??
  • 我可以从 docker 访问 mysql-shell
  • 检查你是否在mysql配置中没有绑定到localhost
  • 现在给出 django.db.utils.OperationalError: (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "当我与 localhost 而不是 db 绑定时,没有这样的文件或目录")')
猜你喜欢
  • 2016-03-08
  • 1970-01-01
  • 2021-11-28
  • 2019-06-06
  • 2022-08-05
  • 2018-10-23
  • 2017-04-12
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多