Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    92

    importare database mysql dentro un contenitore (docker)

    codice:
    $ cat docker-compose.yml
    version: '2'
    services:
      app:
        build:
          context: .
        image: test-image
        ports:
          - 8080:80
        volumes:
          - .:/srv/app
        links:
          - mysql
          - redis
        environment:
          DB_HOST: mysql
          DB_DATABASE: laravel_docker
          DB_USERNAME: app
          DB_PASSWORD: password
          REDIS_HOST: redis
          SESSION_DRIVER: redis
          CACHE_DRIVER: redis
      mysql:
        image: mysql:5.7
        ports:
          - 13306:3306
        environment:
          MYSQL_DATABASE: test
          MYSQL_USER: root
          MYSQL_PASSWORD: root1
          MYSQL_ROOT_PASSWORD: root2
      redis:
        image: redis:4.0-alpine
        ports:
          - 16379:6379
    
    $ cat Dockerfile
    FROM php:7.2.2-cli
    
    COPY . /usr/local/bin
    WORKDIR /usr/local/bin
    RUN docker-php-ext-install mbstring pdo pdo_mysql
    
    CMD mysql -u $MYSQL_USER -p $MYSQL_PASSWORD $MYSQL_DATABASE < test.sql
    
    $ cat test.php
    <?php
    
    $pdo = new pdo(
        "mysql:host=localhost;dbname=test",
        'root','root1'
    );
    
    $query = $pdo->query("SELECT * FROM people");
    var_dump($pdo->errorInfo());
    
    foreach($query as $row ){  
        var_dump($row);  
    }  
    
    $ cat test.sh
    #!/usr/bin/env bash
    set -e
    cd $(dirname "$0")
    
    docker-compose up --build -d
    docker run test-image php /usr/local/bin/test.php
    
    $ ./test.sh
    Building app
    Step 1/5 : FROM php:7.2.2-cli
     ---> 21c3582549e6
    Step 2/5 : COPY . /usr/local/bin
     ---> Using cache
     ---> e0a9005e2907
    Step 3/5 : WORKDIR /usr/local/bin
     ---> Using cache
     ---> 3efd6cdfab46
    Step 4/5 : RUN docker-php-ext-install mbstring pdo pdo_mysql
     ---> Using cache
     ---> 282ab8fb5896
    Step 5/5 : CMD mysql -u $MYSQL_USER -p $MYSQL_PASSWORD $MYSQL_DATABASE < test.sql
     ---> Using cache
     ---> 7ba640bd690d
    Successfully built 7ba640bd690d
    dockermysql_redis_1 is up-to-date
    dockermysql_mysql_1 is up-to-date
    Starting dockermysql_app_1
    
    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /usr/local/bin/test.php:5
    Perchè non funziona?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    580
    Perché PHP non trova il file socket per comunicare con mysql.

    Se in test.php invece di localhost usi 127.0.0.1 dovrebbe funzionare correttamente.

    Inoltre la classe è PDO non pdo, funziona anche in minuscolo ma meglio chiamarla con il suo nome.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    92
    codice:
    $ docker run test-image php /usr/local/bin/test.php
    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /usr/local/bin/test.php:5
    Chi è che rifiuta la connessione e perchè?
    Inoltre quando do il comando

    $ docker-compose up --build -d

    mi appaiono una miriade di queste cose

    codice:
    blabla............
    warning: pdo (pdo.so) is already loaded!
    blabla............
    
    /bin/bash /usr/src/php/ext/pdo_mysql/libtool --mode=compile cc -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -I. -I/usr/src/php/ext/pdo_mysql -DPHP_ATOM_INC -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib  -fstack-protector-strong -fpic -fpie -O2 -DHAVE_CONFIG_H  -fstack-protector-strong -fpic -fpie -O2   -c /usr/src/php/ext/pdo_mysql/mysql_driver.c -o mysql_driver.lo 
     cc -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -I. -I/usr/src/php/ext/pdo_mysql -DPHP_ATOM_INC -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -c /usr/src/php/ext/pdo_mysql/mysql_driver.c  -fPIC -DPIC -o .libs/mysql_driver.o
    /bin/bash /usr/src/php/ext/pdo_mysql/libtool --mode=compile cc -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -I. -I/usr/src/php/ext/pdo_mysql -DPHP_ATOM_INC -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib  -fstack-protector-strong -fpic -fpie -O2 -DHAVE_CONFIG_H  -fstack-protector-strong -fpic -fpie -O2   -c /usr/src/php/ext/pdo_mysql/mysql_statement.c -o mysql_statement.lo 
     cc -I/usr/local/include/php/ext -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -I. -I/usr/src/php/ext/pdo_mysql -DPHP_ATOM_INC -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -fstack-protector-strong -fpic -fpie -O2 -DHAVE_CONFIG_H -fstack-protector-strong -fpic -fpie -O2 -c /usr/src/php/ext/pdo_mysql/mysql_statement.c  -fPIC -DPIC -o .libs/mysql_statement.o
    /bin/bash /usr/src/php/ext/pdo_mysql/libtool --mode=link cc -DPHP_ATOM_INC -I/usr/src/php/ext/pdo_mysql/include -I/usr/src/php/ext/pdo_mysql/main -I/usr/src/php/ext/pdo_mysql -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib  -fstack-protector-strong -fpic -fpie -O2 -DHAVE_CONFIG_H  -fstack-protector-strong -fpic -fpie -O2  -Wl,-O1 -Wl,--hash-style=both -pie -o pdo_mysql.la -export-dynamic -avoid-version -prefer-pic -module -rpath /usr/src/php/ext/pdo_mysql/modules  pdo_mysql.lo mysql_driver.lo mysql_statement.lo 
    cc -shared  .libs/pdo_mysql.o .libs/mysql_driver.o .libs/mysql_statement.o   -Wl,-O1 -Wl,--hash-style=both -Wl,-soname -Wl,pdo_mysql.so -o .libs/pdo_mysql.so
    Cosa diamine c'è che non va?
    Potresti fare una prova sul tuo computer?
    E' da mesi che mi porto dietro questo problemi, quindi vorrei qualcuno di pazienza che mi aiuti d'avvero a venirne fuori.
    Ultima modifica di astros3; 07-01-2019 a 17:45

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    580
    Nell'errore c'è sempre localhost, non 127.0.0.1

    Questo:

    $pdo = new pdo(
    "mysql:host=localhost;dbname=test",
    'root','root1'
    );

    deve diventare:


    $pdo = new pdo(
    "mysql:host=127.0.0.1;dbname=test",
    'root','root1'
    );

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    92
    Nell'errore c'è sempre localhost, non 127.0.0.1
    Da dove lo leggi?

    Quote Originariamente inviata da M4V1 Visualizza il messaggio

    Questo:

    $pdo = new pdo(
    "mysql:host=localhost;dbname=test",
    'root','root1'
    );

    deve diventare:


    $pdo = new pdo(
    "mysql:host=127.0.0.1;dbname=test",
    'root','root1'
    );
    codice:
    $ cat test.php 
    <?php
    $pdo = new PDO(
        "mysql:host=127.0.0.1;dbname=test",
        'root','root1'
    );
    
    $query = $pdo->query("SELECT * FROM people");
    var_dump($pdo->errorInfo());
    
    foreach($query as $row ){  
        var_dump($row);  
    }  
    
    
    $ docker run test-image php /usr/local/bin/test.php
    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /usr/local/bin/test.php:5

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    580
    Hai ragione, non so cosa avevo letto, scusami.

    In ogni caso come vedi l'errore è cambiato, adesso il collegamento funziona ma la connessione viene rifiutata.

    Prova ad usare come password: root2
    e vediamo se così si collega

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    92
    codice:
    $ cat test.php 
    <?php
    
    $pdo = new PDO(
        "mysql:host=127.0.0.1;dbname=test",
        'root','root2'
    );
    
    $query = $pdo->query("SELECT * FROM people");
    var_dump($pdo->errorInfo());
    
    foreach($query as $row ){  
        var_dump($row);  
    }  
    rino@comex:/mnt/storage/pending/tmp.HBZh6gzGcY$ docker run test-image php /usr/local/bin/test.php
    
    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /usr/local/bin/test.php:5
    Stack trace:
    #0 /usr/local/bin/test.php(5): PDO->__construct('mysql:host=127....', 'root', 'root1')
    #1 {main}
      thrown in /usr/local/bin/test.php on line 5
    rino@comex:/mnt/storage/pending/tmp.HBZh6gzGcY$

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    580
    E' strano, nello stack trace ti da sempre root1 come password.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    92
    codice:
    + docker-compose up --build -d
    blablabla...
    Successfully built 3f4e3ce63670
    Successfully tagged test-image:latest
    Starting tmphbzh6gzgcy_redis_1 ... 
    Starting tmphbzh6gzgcy_redis_1 ... done
    Recreating tmphbzh6gzgcy_app_1 ... done
    
    + cat test.php
    <?php
    $pdo = new PDO(
        "mysql:host=127.0.0.1;dbname=test",
        'root', 'root2'
    );
    
    $query = $pdo->query("SELECT * FROM people");
    var_dump($pdo->errorInfo());
    
    foreach($query as $row ){  
        var_dump($row);  
    }  
    + docker run test-image php /usr/local/bin/test.php
    
    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /usr/local/bin/test.php:5
    Stack trace:
    #0 /usr/local/bin/test.php(5): PDO->__construct('mysql:host=127....', 'root', 'root2')
    #1 {main}
      thrown in /usr/local/bin/test.php on line 5
    rino@comex:/mnt/storage/pending/tmp.HBZh6gzGcY$
    Ancora non ci siamo.
    Nel frattempo, che differenza c'è tra MYSQL_PASSWORD e MYSQL_ROOT_PASSWORD?

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    580
    Allora tu usi MYSQL_USER per aggiungere l'utente root che però è già presente di default.

    Quella variabile andrebbe impostata se si intende usare un altro utente, in quel caso va usata anche MYSQL_PASSWORD per impostarne la password.

    Invece MYSQL_ROOT_PASSWORD che va impostata per forza setta la password dell'utente root, che è già presente e quindi non va aggiunto.

    Prova a rimuovere MYSQL_USER: root MYSQL_PASSWORD: root1 dal file .yml, magari creano casino a livello di permessi utente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.