Django无法通过docker-compose连接到mysql

时间:2017-08-30 03:04:11

标签: django docker 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网络的?我如何调查此问题,谢谢

1 个答案:

答案 0 :(得分:0)

尝试将容器添加到同一网络:

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