Docker-Compose无法连接到MySQL

时间:2019-10-15 16:06:05

标签: mysql django python-3.x docker docker-compose

我正在尝试使用docker将Django项目与MySQL连接起来。

启动docker-compose时出现问题。它说下一个错误:

  

super(连接,自我)。初始化(* args,** kwargs2)   django.db.utils.OperationalError:(2002,“无法连接到'db'上的MySQL服务器(115)”)

我正在使用端口3307,是否应该在本地创建第一个新数据库模式?或因为我的默认端口是3306而怎么办,但是如果我尝试使用它,则表明它很忙。

我的代码在这里:

Dockerfile


FROM python:3.7
ENV PYTHONUNBUFFERED 1
ENV LANG=C.UTF-8
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN apt-get update
RUN pip install -r requirements.txt
ADD . /code/


Docker-compose


    version: '2'

services:
  app:
    container_name: container_app
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    command: bash -c "python3 manage.py migrate && python manage.py shell < backend/scripts/setup.py && python3 manage.py runserver 0.0.0.0:8000"
    links:
      - db
    depends_on:
      - db
    ports:
      - "8000:8000"
  db:
    container_name: container_database
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_HOST: 'host.docker.internal'
      MYSQL_DATABASE: 'container_develop'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - "3307:3307"

settings.py:


DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'database_develop',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': 3307,
        'CHARSET': 'utf8',
        'COLLATION': 'utf8_bin',
        'OPTIONS': {
            'use_unicode' : True,
            'init_command': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
        },
    }
}

问题是我在任何地方都没有数据库,所以我在本地使用它,是否必须将数据库上传到服务器,然后使用服务器提供给我的端口? 有什么办法可以从docker本地使用它吗?还是将其安装到Docker?因此,我可以将该docker分享给朋友,他可以使用同一数据库?

2 个答案:

答案 0 :(得分:3)

@Nico回答了我从容器外部修复您的服务可访问性的问题,这意味着如果尝试从主机访问它,则它应该可以工作。

但是在服务之间通信期间将出现错误。您不应在服务中使用发布端口来服务通信,或者在服务中必须使用容器端口来服务通信。

将连接端口从3307更改为3306

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'database_develop',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': 3306,
        'CHARSET': 'utf8',
        'COLLATION': 'utf8_bin',
        'OPTIONS': {
            'use_unicode' : True,
            'init_command': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
        },
    }
}

答案 1 :(得分:2)

在“ db”部分中,在您的docker-compose中:

ports:
  - "3307:3306"