簡體   English   中英

Django無法通過docker-compose連接到mysql

[英]Django can't connect to mysql via docker-compose

我有一個使用Django和MySQL的應用程序。 該應用程序未從Django應用程序連接到MySQL容器,但可以使用具有相同憑據的Sequel Pro進行訪問。

這是我的docker-compose.yml

version: '2'

services:
  db:
    image: mysql:5.7.18
    ports:
      - "3307:3306"
    volumes:
      - "./mysql:/var/lib/mysql"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      - MYSQL_ROOT_PASSWORD=pass
      - MYSQL_DATABASE=django
      - MYSQL_USER=django
      - MYSQL_PASSWORD=pass

  web:
    build:
      context: .
    depends_on:
      - db
#    links:
#      - db
    volumes:
      - "./app:/src"
    command: bash -c "sleep 3 && python3 src/manage.py runserver 8000"
    ports:
      - "8001:8000"
    environment:
      - DJANGO_SETTINGS_MODULE=app.production
      - DB_NAME=django
      - DB_USER=django
      - DB_PASS=pass
      - DB_HOST=db
      - DB_PORT=3306

這是我的django settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.getenv('DB_NAME', 'django'),
        'USER': os.getenv('DB_USER', 'django'),
        'PASSWORD': os.getenv('DB_PASS', 'pass'),
        'HOST': os.getenv('DB_HOST', 'db'),
        'PORT': os.getenv('DB_PORT', '3306'),
        'OPTIONS': {
            'sql_mode': 'STRICT_TRANS_TABLES',
        }
    }
}

這是我不知道該如何解決的錯誤

web_1    | Performing system checks...
web_1    |
web_1    | Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7efeb8563950>
web_1    | Traceback (most recent call last):
web_1    |   File "/usr/local/lib/python3.5/dist-
packages/django/db/backends/base/base.py", line 213, in ensure_connection
web_1    |     self.connect()
web_1    |   File "/usr/local/lib/python3.5/dist-
packages/django/db/backends/base/base.py", line 189, in connect
web_1    |     self.connection = self.get_new_connection(conn_params)
web_1    |   File "/usr/local/lib/python3.5/dist-
packages/django/db/backends/mysql/base.py", line 274, in get_new_connection
web_1    |     conn = Database.connect(**conn_params)
web_1    |   File "/usr/local/lib/python3.5/dist-
packages/MySQLdb/__init__.py", line 86, in Connect
web_1    |     return Connection(*args, **kwargs)
web_1    |   File "/usr/local/lib/python3.5/dist-packages/MySQLdb/connections.py", line 204, in __init__
web_1    |     super(Connection, self).__init__(*args, **kwargs2)
web_1    | _mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'db' (110)")

請指教我不知道我在做什么錯。

更新:我只是看到我的容器也無法將請求發送到sentry.io

Sentry responded with an error: <urlopen error [Errno -3] Temporary failure in name resolution> (url: https://sentry.io/api/210137/store/)

那么這是關於docker網絡? 我如何調查這個問題謝謝

嘗試將容器添加到同一網絡:

version: '2' 
services:
  db: 
    image: mysql:5.7.18
    ...
    networks:
    - base
  web: 
    ...
    networks:
    - base
networks:
  base:

暫無
暫無

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

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