2017-08-30 61 views
2

我有一个使用Django和MySQL的应用程序。应用程序不会从Django应用程序连接到MySQL容器,但可以使用Sequel Pro以相同的凭据访问它。Django无法通过docker-compose连接到mysql

这是我的搬运工,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/) 

所以这大约是码头工人的网络?我怎么调查这个问题,感谢

+0

尝试做一个“泊坞窗EXEC”到Django的容器中,然后尝试做一些DNS故障排除:这是什么'挖分贝。 @ 127.0.0.11'返回? – programmerq

+0

'dig google.com','dig db','dig db。 @ 127.0.0.11'连接超时;没有服务器可以达到 –

回答

0

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

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

容器已经在最初给出的例子中的相同的默认网络上。 – programmerq

+0

不起作用,并且因为默认情况下,docker将创建默认网络。 –

+0

尝试进入Django容器,并检查是否可以手动达到mysql – whites11