2017-02-08 6 views
1

ドッカーの作成を使用して2つのドッカーコンテナを実行しようとしていて、mysqlコンテナをアプリケーションコンテナに接続しようとしています.Mysqlコンテナは実行中ですが、エラーで起動するのに失敗していますエラー: '127.0.0.1:3306'(111 Connection refused)のMySQLサーバーに接続 私のアプリケーションのコンテナがmysqlコンテナの代わりにホストmysqlに接続しようとしているようです。Dockerがmysql接続を作成しません

ドッキングウィンドウ-compose.yml

version: '2' 
services: 
    mysql: 
    image: mysql:5.7 
    container_name: database 
    environment: 
     MYSQL_ROOT_PASSWORD: root 
     MYSQL_DATABASE: malicious 
     MYSQL_USER: root 
     MYSQL_PASSWORD: root 

    app: 
    build: . 
    restart: unless-stopped 
    volumes: 
     - .:/Docker_compose_app #app directory 
    depends_on: 
    - "mysql" 
    command: [ "python", "database_update.py"] 
    restart: unless-restart 
    environment: 
    # Environment variables to configure the app on startup. 
    MYSQL_DATABASE: malicious 
    MYSQL_HOST: database 

Dockerfile

FROM python:2.7 
ADD . /Docker_compose_app 
WORKDIR /Docker_compose_app 
RUN apt-get update 
RUN pip install --requirement requirement.txt 

これは私のdatabase_update.pyファイルです。

def create_TB(cursor,connection): 
     query = '''CREATE TABLE {}(malicious VARCHAR(100) NOT NULL)'''.format("url_lookup") 
     cursor.execute(query) 
     connection.commit() 

    def connection():   
    try: 
     cnx = mysql.connector.connect(user="root",password = 'root',database=malicious) 
     cursor = cnx.cursor() 
     create_TB(cursor,cnx) 

    except mysql.connector.errors.Error as err: 
     data = {"There is an issue in connection to DB":"Error: {}".format(err)} 
+0

mysqlが起動するまでに時間がかかることがありますか?アプリからの接続を開始する前に10〜30秒間スリープしてください。 – dmitryvim

+0

mysqlコンテナが起動してもアプリのコンテナに同じエラーが表示されるため、問題は解決しません。restrat:appsコンビニャーで再起動しない場合は – guri

答えて

2

は、私が見ることができる2つの問題があります。

  1. 試しがあなたのドッカー構図ファイルにappサービスに

    links: 
        - mysql:mysql 
    

    を追加します。これはappからmysqlコンテナに届くことを確認します。 appコンテナにホスト名マッピング(DNS)を設定するので、ping mysqlからappになると、コンテナのIPアドレスmysqlに解決されます。

  2. .pyファイルでは、どのホストに接続するかを定義していますか? connectコールにhost="mysql"を追加します。デフォルトでは、表示されている内容の127.0.0.1に接続します。これらの両方を修正

    cnx = mysql.connector.connect(host="mysql", user="root", password = 'root', database=malicious) 
    

あなたの問題を解決する必要があります。

+0

ありがとう問題を解決しました。しかし、私のアプリケーションコンテナがポートを指定せずにmysqlコネクタに接続する方法を理解しようとしていますか?私はポートを指定していないか、mysqlポートを公開していません。 – guri

+0

MySQLコンテナはポート3306(デフォルトポート)を自動的に公開し、Python MySQL Connectorは3306をデフォルト値として使用します。別のポートを使用した場合は、 'connect'コールで追加の' port = XXX'パラメータを使用して提供することができます。 – nwinkler

関連する問題