簡體   English   中英

Docker-Compose 無法連接到 MySQL

[英]Docker-Compose can't connect to MySQL

我正在嘗試使用 docker 將 Django 項目與 MySQL 連接起來。

我在升級 docker-compose 時遇到問題。 它說下一個錯誤:

超級(連接,自我)。 init (*args, **kwargs2) django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (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"

設置.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 分享給朋友,他可以使用相同的數據庫嗎?

@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',
        },
    }
}

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

ports:
  - "3307:3306"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM