2017-08-30 21 views
2

私はDjangoとMySQLを使用するアプリケーションを持っています。アプリケーションはDjangoアプリケーションからMySQLコンテナに接続しませんが、同じ資格情報を持つSequel Proを使用してアクセスできます。 Djangoはdocker-compose経由でmysqlに接続できません

この

は、これは私の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', 
     } 
    } 
} 

である私のドッキングウィンドウ-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 

であり、これは私が解決する方法がわからないエラーです。この

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

をsentry.ioする要求を送信できないことがわかり?同じネットワークにコンテナを追加し、私はこの問題をどのように調査しないおかげ

+0

Djangoのコンテナに「ドッカexecを」やってみて、その後いくつかのDNSのトラブルシューティングをやってみてください:DIGデシベル '何が。 @ 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

は動作しません。デフォルトでは、ドッカーがデフォルトネットワークを作成するためです。 –

+0

djangoのコンテナに入り、手動でmysqlにアクセスできるかどうかを確認してください – whites11

関連する問題