Bonjour à tous,

Alors j'ai un serveur LEMP installé de manière "classique" sur mon dédié.
En ce moment je fait des test avec Docker en parallèle et j'aurais une question.

Comment faire joindre MySQL par un conteneur sans installer une image MySQL ? Ayant déjà MySQL d'installé, je ne vois pas l’intérêt pour moi d'en installer un deuxième.

Il va sans dire que je suis un (total) débutant avec Docker !

Merci d'avance pour votre aide.

Bonjour,

c'est pas vraiment fait pour. Docker n'est pas designé pour accéder aux services de l'hôte.
A mon avis, tu peux y arriver avec pas mal de pirouettes, mais tu vas arriver à quelque chose de non portable (un comble pour du container...)

L'interêt de lancer un autre conteneur avec mysql (même si tu en as un sur le serveur) est d'avoir quelque chose de facilement portable, et d'avoir la possibilité de créer une ségrégation. Par exemple, si tu as X users avec chacun sa database, tu peux envisager de lancer un container par db.

    Bonjour,

    Techniquement, c'est loin d'être aussi compliqué que le laisse sous-entendre Merrick . Pas contre, je ploussoie quand il dit que tu perds tout l'intérêt de docker !
    Je rajouterai même que tu te rajoutes une couche de risque inutile.

    De plus, un des intérêts autre que la compartimentation, c'est que docker partage les librairies entre tous les containers qui les utilisent. Ainsi, si tu as 15 containers mysql, ça ne prendra pas plus de ressources que si tu avait 1 mysql avec 15 bases.

    Donc franchement, n'hésites pas à user et abuser des containers mysql. Tu verras même que lorsque tu maitriseras un peu mieux docker, tu migreras tous tes services dedans et arrêteras d'uliser ton mysql "natif" 😉
    z.

    Ok, effectivement docker perdrai de son intérêt. Je ne vais pas me prendre la tête et créer un conteneur dédié.

    Merci pour ta vos réponses.

    Je retourne m'amuser avec Docker, c'est super intéressant même si je ne fais que débuter.

    Bon... Je galère !
    Je dois pas avoir le cerveau fait pour ça, je suis à la rue.
    Pour m'entrainer, j'aimerai installer Monica : https://github.com/monicahq/monica
    J'ai renseigné mon .env comme ceci :

    ...
    # Database information
    # To keep this information secure, we urge you to change the default password
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=monica
    DB_USERNAME=monica
    DB_PASSWORD=mdpbddmonica
    DB_PREFIX=
    DB_TEST_DATABASE=monica_test
    DB_TEST_USERNAME=monica_test
    DB_TEST_PASSWORD=mdpbddmonicatest
    ...

    Déjà, je ne sais pas ce qu'est cette base de donnée "test".
    Ensuite je créer ces bases de données avec l'image mariadb

    docker run -p 3450:3306 \
    >  -v /opt/monica/mysql:/var/lib/mysql \
    >  -e MYSQL_ROOT_PASSWORD=passwordroot \
    >  -e MYSQL_DATABASE=monica \
    >  -e MYSQL_USER=monica \
    >  -e MYSQL_PASSWORD=mdpbddmonica \
    >  --name monica_db \
    >  --restart=always \
    >  -d mariadb

    monica_test_db

    docker run -p 3452:3306 \
    >  -v /opt/monica/mysql:/var/lib/mysql \
    >  -e MYSQL_ROOT_PASSWORD=monpasswordroot \
    >  -e MYSQL_DATABASE=monica_test \
    >  -e MYSQL_USER=monica_test \
    >  -e MYSQL_PASSWORD=mdpbddmonicatest \
    >  --name monica_test_db \
    >  --restart=always \
    >  -d mariadb

    Je crée mon conteneur monica avec les link pour les BDD :

    docker run -p 3454:80 \
    --env-file /opt/monica/.env \
    --link monica_db:mariadb \
    --link monica_test_db:mariadb \
    --restart=always \
    --name Monica \
    monicahq/monicahq

    J'ai cette "erreur" :

    Connecting to 127.0.0.1:3306
    Unable to connect to 127.0.0.1:3306; sleeping
    Unable to connect to 127.0.0.1:3306; sleeping
    Unable to connect to 127.0.0.1:3306; sleeping
    Unable to connect to 127.0.0.1:3306; sleeping
    ...

    Je pense que mon problème viens des ports, ou encore de ma façon de créer ou joindre mes base de données...
    Bref, je suis perdu. Pourtant je me rends bien compte que ça doit être la base...

    Docker, docker, docker.... C'est à la fois simple et complexe 😉

    Là, ton erreur vient de tes links.
    Tu as 2 bases pour l'application. Je ne sais pas quel tuto tu as suivi, mais à priori ce n'est pas necessaire.

    Néanmoins, le soucis, c'est que tu link tes deux containers mysql avec le même alias !

    --link monica_db:mariadb \
    --link monica_test_db:mariadb \

    Si tu veux linker plusieurs containers entre eux, l'alias (ici "mariadb") doit être unique pour chaque container.

    Par contre, à faire du docker, autant y aller à fond et utiliser docker-compose. C'est un binaire qui permet d'écrire des fichiers "recette" en yaml.

    D'autant plus que Monica en fourni un tout fait :
    https://github.com/monicahq/monica/blob/master/docker-compose.yml

    Installes docker-compose comme ceci :

    DOCKER_COMPOSE_VERSION="$(curl https://github.com/docker/compose/releases/latest 2> /dev/null | sed 's#.*tag/##;s#">.*##')"
    curl -L https://github.com/docker/compose/releases/download/"$DOCKER_COMPOSE_VERSION"/docker-compose-"$(uname -s)"-"$(uname -m)" > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    Ensuite, tu récupère le fichier docker-compose.yml depuis github, tu l'adaptes à ce que tu veux, puis tu exécutes docker-compose up -d

    Note: Je viens de voir que le docker-compose fait un build... Vu qu'une image officielle est proposée, tu peux t'en passer. Pour ça, il convient de supprimer la ligne build: . avec d'exécuter docker-compose.
    Si tu tiens à faire le build toit même, il faut cloner tout le git de monica ! (utile que si tu veux faire des modifs particulières).

    ok, j'avais peur d'essayer docker-compose pour me rajouter de la difficulté mais je m'y met.
    Je vais retirer le build, on est encore loin des modifs particulière
    Avec leur docker compose, j'ai quand même l'erreur :

    Connecting to 127.0.0.1:3306
    Unable to connect to 127.0.0.1:3306; sleeping
    Unable to connect to 127.0.0.1:3306; sleeping

    Du coup voilà mon docker compose :

    version: "2"
    services:
      monicahq:
        image: monicahq/monicahq
        links:
          - mysql
        ports:
          - 3454:80
        env_file: .env
        volumes:
          - ./persist/storage/app/public:/var/www/monica/storage/app/public
    
      mysql:
        image: mariadb
        environment:
          - MYSQL_ROOT_PASSWORD=monpasswordroot
          - MYSQL_DATABASE=monica
          - MYSQL_USER=monica
          - MYSQL_PASSWORD=mdpbddmonica
        volumes:
          - ./persist/mysql:/var/lib/mysql
    • zer a répondu à ça.

      Avant de lancer docker compose :

      • quels sont les autres conteneurs qui tournent (commande docker ps)
      • Est-ce que tu as ce message quand tu lances docker-compose up -d ?
      • Est-ce que peux lancer docker-compose up (sans le -d) pour voir s'il te rend la main ou pas ? (il ne devrait pas, il faut arrêter par ctrl+c)

        Merrick
        Alors je n'ai pas grand chose comme conteneur :

        docker ps
        05ba4eac125e        bnjbvr/kresus       "/entrypoint.sh 'kre…"   3 days ago          Up 3 days           127.0.0.1:9876->9876/tcp   Kresus
        1fd783c99870        7120867536bd        "/portainer"             7 days ago          Up 5 days           127.0.0.1:9000->9000/tcp   Portainer

        Voilà ce que j'ai comme message avec docker-compose up -d:

        Creating monica_mysql_1    ... done
        Creating monica_mysql_1    ... 
        Creating monica_monicahq_1 ... done

        Et sans le -d, il ne me rends pas la main mais m'affiche l'erreur en boucle :

        Creating monica_mysql_1    ... done
        Creating monica_mysql_1    ... 
        Creating monica_monicahq_1 ... done
        Attaching to monica_mysql_1, monica_monicahq_1
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] mysqld (mysqld 10.2.12-MariaDB-10.2.12+maria~jessie) starting as process 1 ...
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Uses event mutexes
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Compressed tables use zlib 1.2.8
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Using Linux native AIO
        monicahq_1  | docker/waitfordb.sh
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Number of pools: 1
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Using SSE2 crc32 instructions
        monicahq_1  | Connecting to 127.0.0.1:3306
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Completed initialization of buffer pool
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        mysql_1     | 2018-02-12 15:04:57 139994996860672 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Highest supported file format is Barracuda.
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: 128 out of 128 rollback segments are active.
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Creating shared tablespace for temporary tables
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] InnoDB: 5.7.20 started; log sequence number 1619310
        mysql_1     | 2018-02-12 15:04:57 139994702268160 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] Plugin 'FEEDBACK' is disabled.
        mysql_1     | 2018-02-12 15:04:57 139994702268160 [Note] InnoDB: Buffer pool(s) load completed at 180212 15:04:57
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Note] Server socket created on IP: '::'.
        mysql_1     | 2018-02-12 15:04:57 139995735127936 [Warning] 'proxies_priv' entry '@% root@369061ca3c86' ignored in --skip-name-resolve mode.
        mysql_1     | 2018-02-12 15:04:58 139995735127936 [Note] Reading of all Master_info entries succeded
        mysql_1     | 2018-02-12 15:04:58 139995735127936 [Note] Added new Master_info '' to hash table
        mysql_1     | 2018-02-12 15:04:58 139995735127936 [Note] mysqld: ready for connections.
        mysql_1     | Version: '10.2.12-MariaDB-10.2.12+maria~jessie'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        monicahq_1  | Unable to connect to 127.0.0.1:3306; sleeping
        ...

        Merci à vous 2 de me donner de votre temps

        Kaoz52
        Essayes comme ça (j'aime pas les fichiers .env 😛)

        version: "2"
        services:
          monicahq:
            image: monicahq/monicahq
            links:
              - mysql
            ports:
              - 3454:80
            env_file: 
              - DB_CONNECTION=mysql
              - DB_HOST=127.0.0.1
              - DB_PORT=3306
              - DB_DATABASE=monica
              - DB_USERNAME=monica
              - DB_PASSWORD=mdpbddmonica
              - DB_PREFIX=
            volumes:
              - ./persist/storage/app/public:/var/www/monica/storage/app/public
        
          mysql:
            image: mariadb
            environment:
              - MYSQL_ROOT_PASSWORD=monpasswordroot
              - MYSQL_DATABASE=monica
              - MYSQL_USER=monica
              - MYSQL_PASSWORD=mdpbddmonica
            volumes:
              - ./persist/mysql:/var/lib/mysql

          Alors là oui mais non.

          Pourquoi le conteneur monicahq essaie de se connecter au localhost:3306 ? Il ne devrait se connecter qu'au container "mariadb"

          De plus, si on décrit les variables, on remplace env_file par environment.

          On devrait avoir :

           environment: 
                - DB_CONNECTION=mysql
                - DB_HOST=mysql
                - DB_PORT=3306
                - DB_DATABASE=monica
                - DB_USERNAME=monica
                - DB_PASSWORD=mdpbddmonica
                - DB_PREFIX=

          (edit j'avais pas tout bien lu...)

            Merrick
            zer

            J'ai utilisé environment.
            Non toujours pas, la même erreur...
            Est-ce que ça ne viendrait pas du fait que j'ai déjà mariadb qui tourne sur mon serveur ? Il faudrait peut-être utiliser un autre port que le 3306 ?

            Non, ça ne vient pas là.

            Le conteneur essaie de se connecter à lui même :

            Unable to connect to 127.0.0.1:3306

            Il ne devrait pas, avec le docker-compose que je t'ai mis, il devrait se connecter à l'hôte "mysql" qui est défini dans le link.

            Salut,

            Déjà c'est fou, c'est la deuxième appli que tu me fais découvrir .

            Leur image docker est loin d'être optimal, mais normalement :

            version: "2"
            services:
              monicahq:
                image: monicahq/monicahq
                links:
                  - mysql
                ports:
                  - 3454:80
                env_file: 
                  - DB_CONNECTION=mysql
                  - DB_HOST=mysql
                  - DB_PORT=3306
                  - DB_DATABASE=monica
                  - DB_USERNAME=monica
                  - DB_PASSWORD=mdpbddmonica
                  - DB_PREFIX=
                volumes:
                  - ./persist/storage/app/public:/var/www/monica/storage/app/public
            
              mysql:
                image: mariadb
                environment:
                  - MYSQL_ROOT_PASSWORD=monpasswordroot
                  - MYSQL_DATABASE=monica
                  - MYSQL_USER=monica
                  - MYSQL_PASSWORD=mdpbddmonica
                volumes:
                  - ./persist/mysql:/var/lib/mysql

            ça devrait fonctionner

              xataz Déjà c'est fou, c'est la deuxième appli que tu me fais découvrir

              Si au moins j'ai pu servir à ça, je suis content !

              Pour mon problème, ton docker compose me retire mon erreur en boucle : Unable to connect to 127.0.0.1:3306; sleeping
              J'ai modifié env-file par environment par contre.
              Mais j'en ai une autre, il n'arrive pas à se connecter à cause du mot de passe :

              mysql_1     | 2018-02-12 21:17:23 139733308790528 [Warning] Access denied for user 'monica'@'172.18.0.3' (using password: YES)
              monicahq_1  | 
              monicahq_1  | In Connection.php line 664:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES) (SQL: select * from information_schema.tables where table_sc  
              monicahq_1  |   hema = monica and table_name = migrations)                                   
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | In PDOConnection.php line 47:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES)                                                               
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | In PDOConnection.php line 43:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES)                                                               
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | The [public/storage] directory has been linked.
              mysql_1     | 2018-02-12 21:17:23 139733308790528 [Warning] Access denied for user 'monica'@'172.18.0.3' (using password: YES)
              monicahq_1  | 
              monicahq_1  | In Connection.php line 664:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES) (SQL: truncate `activity_types`)                              
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | In PDOConnection.php line 47:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES)                                                               
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | In PDOConnection.php line 43:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES)                                                               
              monicahq_1  |                                                                                
              monicahq_1  | 
              mysql_1     | 2018-02-12 21:17:23 139733308790528 [Warning] Access denied for user 'monica'@'172.18.0.3' (using password: YES)
              monicahq_1  | 
              monicahq_1  | In Connection.php line 664:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES) (SQL: truncate `countries`)                                   
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | In PDOConnection.php line 47:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES)                                                               
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | In PDOConnection.php line 43:
              monicahq_1  |                                                                                
              monicahq_1  |   SQLSTATE[HY000] [1045] Access denied for user 'monica'@'172.18.0.3' (using   
              monicahq_1  |   password: YES)                                                               
              monicahq_1  |                                                                                
              monicahq_1  | 
              monicahq_1  | AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message

              Les mots de passes sont pourtant identiques.

                Kaoz52 Tu dois bien avoir un problème de mot de passe, je viens de tester, avec le docker-compose (en remplaçant env_file par environment biensur, mauvais copier coller de ma part) et aucun soucis :

                monicahq_1  | docker/waitfordb.sh
                monicahq_1  | Connecting to mysql:3306
                monicahq_1  | Unable to connect to mysql:3306; sleeping
                monicahq_1  | Waiting for database to settle
                monicahq_1  | docker/test-server.sh
                monicahq_1  | Application key [base64:Aua03d11bb8RklH/tfTDJORGajM8nOlBRI/QzJExMBI=] set successfully.
                monicahq_1  | Migration table created successfully.
                monicahq_1  | Migrating: 2014_10_12_000000_create_users_table
                monicahq_1  | Migrated:  2014_10_12_000000_create_users_table
                monicahq_1  | Migrating: 2014_10_12_100000_create_password_resets_table
                monicahq_1  | Migrated:  2014_10_12_100000_create_password_resets_table
                monicahq_1  | Migrating: 2016_06_01_000001_create_oauth_auth_codes_table
                monicahq_1  | Migrated:  2016_06_01_000001_create_oauth_auth_codes_table
                [...]
                monicahq_1  | Migrating: 2017_12_21_163616_update_journal_entries_with_existing_activities
                monicahq_1  | Migrated:  2017_12_21_163616_update_journal_entries_with_existing_activities
                monicahq_1  | Migrating: 2017_12_21_170327_add_google2fa_secret_to_users
                monicahq_1  | Migrated:  2017_12_21_170327_add_google2fa_secret_to_users
                monicahq_1  | Migrating: 2017_12_24_115641_create_pets_table
                monicahq_1  | Migrated:  2017_12_24_115641_create_pets_table
                monicahq_1  | Migrating: 2017_12_31_114224_add_dashboard_tab_to_users
                monicahq_1  | Migrated:  2017_12_31_114224_add_dashboard_tab_to_users
                monicahq_1  | The [public/storage] directory has been linked.

                Ou alors un caractère qu'il n'aime pas dans le mdp, genre un dollar (il faut les doubler dans un docker-compose), essaie pour commencer avec des mot de passe simple, genre changeme pour voir.

                  Avant de le relancer, tu as bien supprimé les fichiers persistants ?
                  Si non, il va essayer de charger la première base créée (sans doute lors des exécutions en 'docker run'), et pour peux que ça soit la base de test qui ait été créée en premier, forcément; il râle !

                  Penses à tout supprimer (sauf le docker-compose.yml 😃 ) et relance docker-compose up -d.

                    xataz

                    zer

                    C'était bien ça, il fallait que je supprime les anciens fichiers. J'ai eu un flash hier soir.

                    Du coup ça marche nickel, ça fonctionne même avec le .env et env-file qui est fourni.

                    Merci beaucoup pour votre aide, je vais essayer un autre soft pour m'entrainer.

                    Sinon concernant le soft, en regardant rapidement ça a l'air pas mal mais vu que ça ne gère pas le CARDdav, ça me limite un peu l'utilisation.

                    Encore merci pour votre patience et de toute façon, je ne doute pas que je vais encore devoir revenir...

                    Répondre…