【问题标题】:'Can\'t connect to MySQL server on \'db\' Django-Restframework with Mysql in docker'无法使用 docker 中的 Mysql 连接到 \'db\' Django-Rest Framework 上的 MySQL 服务器
【发布时间】:2018-11-03 07:18:25
【问题描述】:

我已经将我现有的使用 MySQL 数据库的 Django Rest 项目 dockerized。

Dockefile

FROM python:3.6

ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN pip install -r requirements.txt

requirements.txt

django
djongo
django-rest-framework
轮子
枕头
mysql客户端
django-cors-headers

docker-compose.yml

version: '3'
volumes:
    portainer:

services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: docker
      MYSQL_DATABASE: docker
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
    ports:
      - "3306:3306"

  web:
    build: .
    command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000 "
    volumes: 
      - .:/code
    ports:
      - "8000:8000"
    links:
     - db
  portainer:
   image: portainer/portainer
   ports:
   - "9000:9000"
   volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - portainer:/data

setting.py

        'ENGINE': 'django.db.backends.mysql', #django.db.backends.mysql 
        'NAME': 'docker', #local: libraries #server: 
        'USER': 'docker', #root #root
        'PASSWORD': 'docker', #local: root #server: 
        'HOST': 'db', #local: localhost  #server:
        'PORT': '3306',

我的命令 'docker-compose up -d --build' 成功,但 restapp 容器未启动,因此在检查日志时显示此错误 django.db.utils.OperationalError: (2003, 'Can\'t connect to MySQL server on \'db\' (111 "Connection refused")')

【问题讨论】:

  • 同样的代码对我有用。但我遇到了另一个问题,即django.db.utils.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded,这与这个问题无关

标签: python mysql django docker django-rest-framework


【解决方案1】:

如果您的应用程序容器(此处为web)在您的数据库完全初始化之前启动,则可能会发生这种情况。

您必须等到db 服务启动(更准确地说,直到mysql 接受连接)才能启动您的应用程序(python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000)。

为此,您可以在运行 python 命令之前使用wait-for-it.sh 脚​​本(检查https://docs.docker.com/compose/startup-order/)。或者,您可以在 web 服务 (https://docs.docker.com/compose/compose-file/#restart_policy) 上使用重启策略来自动重启服务(直到数据库启动)。

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多