2017-06-13 9 views
3

DockerをDjangoで使用しようとしていますが、エラーdb_1 | error: database is uninitialized and password option is not specified db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (111)")が発生します。私がDockerなしで私のアプリを使用しているとき、それは動作します。助言がありますか?DockerでDjangoを使用する際にエラーが発生しました - 「127.0.0.1(111)」のMySQLサーバーに接続できません)

マイDockerfile:

FROM python:3 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install -r requirements.txt 
ADD . /code/ 

マイドッキングウィンドウ-compose.yml:

version: '3' 

services: 
    db: 
    image: mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: "" 
     MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' 
    web: 
    build: . 
    command: python3 virtualPRI/PRI/backend/pri/manage.py runserver 0.0.0.0:8000 
    volumes: 
     - .:/code 
    ports: 
     - "8000:8000" 
    depends_on: 
     - db 

が、この瞬間のプロセスへの:

version: '3' 

services: 
    db: 
    image: mysql 
    web: 
    build: . 
    command: python3 Project/myVirtual/backend/pri/manage.py runserver 0.0.0.0:8000 
    volumes: 
     - .:/code 
    ports: 
     - "8000:8000" 
    depends_on: 
     - db 

私が変更されているドッキングウィンドウ-compose.yamlへブロックしました

db_1 | 2017-06-13T05:16:16.457122Z 0 [Note] End of list of non-natively partitioned tables 

または時々私はまだweb_1 | django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (111)")

manage:pyを得る:

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pri.settings") 
    try: 
     from django.core.management import execute_from_command_line 
    except ImportError: 
     # The above import may fail for some other reason. Ensure that the 
     # issue is really that Django is missing to avoid masking other 
     # exceptions on Python 2. 
     try: 
      import django 
     except ImportError: 
      raise ImportError(
       "Couldn't import Django. Are you sure it's installed and " 
       "available on your PYTHONPATH environment variable? Did you " 
       "forget to activate a virtual environment?" 
      ) 
     raise 
    execute_from_command_line(sys.argv) 
+0

ドッカーのコマンド/ドッカーの作成ファイル –

+0

@AzatIbrakov私は自分の投稿を更新しました。 –

+0

コンテナ/イメージを強制的に削除してもう一度試してみてください –

答えて

1

127.0.0.1 (111)は、MySQLがあなたの接続要求を拒否したことを意味します。 MySQLサーバとDjangoが同じDockerインスタンスで実行されていないと仮定していますか?

MySQLが別の場所で動作している場合は、Djangoの設定ファイルでMySQL接続が正しく設定されていることを確認する必要があります。

解決策1:あなたが0.0.0.0127.0.0.1からのMySQLの結合アドレスを変更することで、(私はあなたがこれを行う奨励していません)のMySQLへのリモートアクセスを許可することができます。 MySQL DBの接続設定を適切に更新してください。 (インスパイア:あなたは/etc/my.cnfからこれらの行をコメントアウトすることができますLinuxでは

は、ソリューション2 https://dev.mysql.com/doc/refman/5.5/en/can-not-connect-to-server.html

も参照、より詳細な指示については

skip-networking 
bind-address = 127.0.0.1 

(場所は異なる場合があります) @programerqのコメントで)ホストOSまたは別のDockerインスタンスでMySQLを実行できます。デフォルトでMySQLが127.0.0.1にバインドされているので、Django Dockerインスタンスの起動時にMySQLMachine:MySQLPortDjangoDocker:MySQLPortにマッピングできます。 Djangoはまだ127.0.0.1にMySQLに接続できますが、MySQLが実際にどこか別の場所で動作していることに気付くことはありません。

私はDockerクラスタープロジェクトでポートマッピングを行ったことがあります。これはcheck the commands I ranとすることも、公式のDockerドキュメントをチェックすることもできます。

これらのアイデアが参考になることを願っています。

+0

私はmac osで作業していますが、私はmy.cnfを見つけましたが、 'bind-address = 127.0.0.1'に関するコメントはありません#skip-networkingだけです。 –

+0

mysqlサーバが1つのコンテナで実行されているため、 '127.0.0.1(111)'上の 'MySQLサーバに接続できません 'エラーメッセージを生成するコードが別のコンテナにある場合、これは予期しないエラーメッセージです。各コンテナは独自のネットワークネームスペースを取得するため、独自の127.0.0.1を取得します。 mysqlドッカーの画像は、すべてのコンテナインターフェイスでリッスンするように設定されており、他のコンテナのコー​​ドはネットワークサービスディスカバリを使用して連絡できます。 my.cnfファイルは変更する必要はありません。 – programmerq

+0

@programmerqまあ、Dockerネットワークインターフェイス経由で特定のローカルポートを公開することができます。いいアイデアですね。 – stanleyxu2005

関連する問題