Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #21901 > unrolled thread

mysql all'interno di docker

Started byalex <1j9448a02@lnx159sneakemail.com.invalid>
First post2018-03-13 14:37 +0100
Last post2018-03-14 13:18 +0100
Articles 8 — 2 participants

Back to article view | Back to it.comp.www.php


Contents

  mysql all'interno di docker alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-03-13 14:37 +0100
    Re: mysql all'interno di docker Alessandro Pellizzari <shuriken@amiran.it> - 2018-03-13 15:02 +0000
      Re: mysql all'interno di docker alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-03-13 16:22 +0100
        Re: mysql all'interno di docker Alessandro Pellizzari <shuriken@amiran.it> - 2018-03-13 16:58 +0000
          Re: mysql all'interno di docker alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-03-13 18:57 +0100
          Re: mysql all'interno di docker alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-03-13 19:21 +0100
            Re: mysql all'interno di docker Alessandro Pellizzari <shuriken@amiran.it> - 2018-03-14 10:24 +0000
              Re: mysql all'interno di docker alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-03-14 13:18 +0100

#21901 — mysql all'interno di docker

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-03-13 14:37 +0100
Subjectmysql all'interno di docker
Message-ID<p88k60$17hu$1@gioia.aioe.org>
++++ cat docker-compose.yml
version: '3.3'
services:
   app:
     build:
       context: .
       dockerfile: docker/Dockerfile
     image: laravel-docker
     ports:
       - 4000:80
     volumes:
       - ./src:/var/www/html
     links:
       - mysql
       - redis
     environment:
       DB_HOST: mysql
       DB_DATABASE: test
       DB_USERNAME: root
       DB_PASSWORD: root
       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: root
       MYSQL_ROOT_PASSWORD: root
     volumes:
         - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql
   redis:
     image: redis:4.0-alpine
     ports:
       - 16379:6379

++++ cat docker/Dockerfile
FROM php:7.2.2-apache
RUN docker-php-ext-install mbstring pdo pdo_mysql

++++ cat src/index.php
<?php
error_reporting(255);

$pdo = new PDO(
     'mysql:dbname=test;host=mysql',
     'root',
     'root'
);

++++ docker-compose up -d --build
Building app

++++ curl http://localhost:4000
<b>Fatal error</b>:  Uncaught PDOException: SQLSTATE[HY000] [2002] 
Connection refused in /var/www/html/index.php:7

Perchè?

[toc] | [next] | [standalone]


#21902

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2018-03-13 15:02 +0000
Message-ID<fgq7g1FajreU1@mid.individual.net>
In reply to#21901
On 13/03/2018 13:37, alex wrote:

>    mysql:
>      ports:
>        - 13306:3306

> Perchè?

Perché!


Ah, con la config che hai usato il DB rimane dentro al container e viene 
distrutto con lui.

Questa è la config che uso io:

   mysql:
     image: mysql:latest
     ports:
       - "3306:3306"
     volumes:
       - ${LOCALPATH}/data/mysql:/var/lib/mysql:cached
     environment:
       - "MYSQL_ROOT_PASSWORD=supersecretpassword"
     command: |
       mysqld --datadir=/var/lib/mysql --user=mysql --server-id=1 
--log-bin=/var/log/mysql/mysql-bin.log

Bye.

[toc] | [prev] | [next] | [standalone]


#21903

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-03-13 16:22 +0100
Message-ID<p88qau$1jdr$1@gioia.aioe.org>
In reply to#21902
Il 13/03/2018 16:02, Alessandro Pellizzari ha scritto:
> 
> Perché!
> 
> 
> Ah, con la config che hai usato il DB rimane dentro al container e viene 
> distrutto con lui.
> 

Però c'è l'opzione -d ?

> Questa è la config che uso io:
> 
>    mysql:
>      image: mysql:latest
>      ports:
>        - "3306:3306"
>      volumes:
>        - ${LOCALPATH}/data/mysql:/var/lib/mysql:cached
>      environment:
>        - "MYSQL_ROOT_PASSWORD=supersecretpassword"
>      command: |
>        mysqld --datadir=/var/lib/mysql --user=mysql --server-id=1 
> --log-bin=/var/log/mysql/mysql-bin.log
> 
> Bye.

+ cat docker-compose.yml
version: '3.3'
services:
   app:
     build:
       context: .
       dockerfile: docker/Dockerfile
     image: laravel-docker
     ports:
       - 4000:80
     volumes:
       - ./src:/var/www/html
     links:
       - mysql
       - redis
     environment:
       DB_HOST: mysql
       DB_DATABASE: test
       DB_USERNAME: root
       DB_PASSWORD: root
       REDIS_HOST: redis
       SESSION_DRIVER: redis
       CACHE_DRIVER: redis
   mysql:
     image: mysql:latest
     ports:
       - 3306:3306
     environment:
       MYSQL_DATABASE: test
       MYSQL_USER: root
       MYSQL_PASSWORD: root
       MYSQL_ROOT_PASSWORD: root
     volumes:
         - ${LOCALPATH}/dump.sql:/docker-entrypoint-initdb.d/dump.sql:cached
   redis:
     image: redis:4.0-alpine
     ports:
       - 16379:6379
     command:
       mysqld --datadir=/var/lib/mysql --user=mysql --server-id=1 
--log-bin=/var/log/mysql/mysql-bin.log

+ docker-compose up -d --build
WARNING: The LOCALPATH variable is not set. Defaulting to a blank string.
Creating network "dockermysql_default" with the default driver
Building app
Step 1/2 : FROM php:7.2.2-apache
  ---> 08685253e459
Step 2/2 : RUN docker-php-ext-install mbstring pdo pdo_mysql
  ---> Using cache
  ---> fdb2f4e67537

Successfully built fdb2f4e67537
Successfully tagged laravel-docker:latest
Creating dockermysql_mysql_1 ... error
Creating dockermysql_redis_1 ...

Creating dockermysql_redis_1 ... done
_mysql_1 
(2fc2fcfccee1beb12e9c9a73e20070a601cad0c52d1ad2a35d1b63f1be412b2d): 
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address 
already in use

ERROR: for mysql  Cannot start service mysql: driver failed programming 
external connectivity on endpoint dockermysql_mysql_1 
(2fc2fcfccee1beb12e9c9a73e20070a601cad0c52d1ad2a35d1b63f1be412b2d): 
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address 
already in use
ERROR: Encountered errors while bringing up the project.
rino@comex:~$

[toc] | [prev] | [next] | [standalone]


#21904

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2018-03-13 16:58 +0000
Message-ID<fgqeabFc6o2U1@mid.individual.net>
In reply to#21903
On 13/03/2018 15:22, alex wrote:

> Il 13/03/2018 16:02, Alessandro Pellizzari ha scritto:

>> Ah, con la config che hai usato il DB rimane dentro al container e 
>> viene distrutto con lui.

> Però c'è l'opzione -d ?

-d fa semplicemente girare i container in background
Se vuoi che i dati rimangano quando distruggi il container (per esempio 
per upgradare a una nuova versione dell'immagine MySQL) devi usare un 
volume e tenere i dati fuori dal container.

Magari distruggerli è esattamente quello che vuoi. Non è sbagliato di 
principio. Per esempio potresti voler lanciare il DB ogni volta con un 
DB pulito e importare i dati di base per i test.

> WARNING: The LOCALPATH variable is not set. Defaulting to a blank string.

Naturalmente devi valorizzare le variabili nel tuo ambiente locale 
(nella shell normale, in pratica). Puoi usare $HOME per la tua home, ecc.

> _mysql_1 
> (2fc2fcfccee1beb12e9c9a73e20070a601cad0c52d1ad2a35d1b63f1be412b2d): 
> Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address 
> already in use

Probabilmente hai già un MySQL che gira sulla macchina locale.

Ma mi sa che hai ragione e non era quello il problema, visto che nella 
rete "interna" dovrebbe comunque esporlo come 3306 anche se fai l'alias 
locale.

Bye.

[toc] | [prev] | [next] | [standalone]


#21905

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-03-13 18:57 +0100
Message-ID<p893dc$bor$1@gioia.aioe.org>
In reply to#21904
Il 13/03/2018 17:58, Alessandro Pellizzari ha scritto:
> On 13/03/2018 15:22, alex wrote:
> 
>> Il 13/03/2018 16:02, Alessandro Pellizzari ha scritto:
> 
>>> Ah, con la config che hai usato il DB rimane dentro al container e 
>>> viene distrutto con lui.
> 
>> Però c'è l'opzione -d ?
> 
> -d fa semplicemente girare i container in background
> Se vuoi che i dati rimangano quando distruggi il container (per esempio 
> per upgradare a una nuova versione dell'immagine MySQL) devi usare un 
> volume e tenere i dati fuori dal container.
> 
> Magari distruggerli è esattamente quello che vuoi. Non è sbagliato di 
> principio. Per esempio potresti voler lanciare il DB ogni volta con un 
> DB pulito e importare i dati di base per i test.

Esatto.

>> _mysql_1 
>> (2fc2fcfccee1beb12e9c9a73e20070a601cad0c52d1ad2a35d1b63f1be412b2d): 
>> Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address 
>> already in use
> 
> Probabilmente hai già un MySQL che gira sulla macchina locale.

O forse perchè le due porte (esterna:interna) sono uguali, ed io ho 
copiato esattamente quello che hai scritto tu:

ports:
        - "3306:3306"

> Ma mi sa che hai ragione e non era quello il problema, visto che nella 
> rete "interna" dovrebbe comunque esporlo come 3306 anche se fai l'alias 
> locale.

Ricominciamo da capo.
Voglio creare un immagine in cui gira apache, php, e mysql.
Innanzitutto

mkdir my-project
cd my-project
touch docker-compose.yml

Poi? (una cosa alla volta e con ordine)

[toc] | [prev] | [next] | [standalone]


#21906

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-03-13 19:21 +0100
Message-ID<p894qk$edm$1@gioia.aioe.org>
In reply to#21904
Il 13/03/2018 17:58, Alessandro Pellizzari ha scritto:
> 
>> WARNING: The LOCALPATH variable is not set. Defaulting to a blank string.
> 
> Naturalmente devi valorizzare le variabili nel tuo ambiente locale 
> (nella shell normale, in pratica). Puoi usare $HOME per la tua home, ecc.

Per curiosità, perchè usi $LOCALPATH?
In quale file ha messo l'istruzione

export LOCALPATH=...

???

[toc] | [prev] | [next] | [standalone]


#21907

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2018-03-14 10:24 +0000
Message-ID<fgsbi3Fp7keU1@mid.individual.net>
In reply to#21906
On 13/03/2018 18:21, alex wrote:

> Per curiosità, perchè usi $LOCALPATH?
> In quale file ha messo l'istruzione
> 
> export LOCALPATH=...

Uso direnv per tenere la config nella cartella del progetto e trovarmi 
le env-vars automaticamente inizializzate quando ci entro.

Bye.

[toc] | [prev] | [next] | [standalone]


#21908

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2018-03-14 13:18 +0100
Message-ID<p8b3vd$1jjr$1@gioia.aioe.org>
In reply to#21907
Il 14/03/2018 11:24, Alessandro Pellizzari ha scritto:
> On 13/03/2018 18:21, alex wrote:
> 
>> Per curiosità, perchè usi $LOCALPATH?
>> In quale file ha messo l'istruzione
>>
>> export LOCALPATH=...
> 
> Uso direnv per tenere la config nella cartella del progetto e trovarmi 
> le env-vars automaticamente inizializzate quando ci entro.

$ echo export FOO=foo > .envrc
$ direnv allow .
$ echo ${FOO-nope}
nope

Non sembra funzionare :(

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.www.php


csiph-web