gstreamer0.10-ffmpeg
gstreamer0.10-plugins-good
packages.
Ahora tenemos una base de datos Postgres ejecutándose dentro de un contenedor Docker. Podemos verlo ejecutando:
docker-compose ps
Esto también nos dice que si queremos hablar con esta base de datos, podemos conectarnos al puerto50739
en nuestra máquina local. Ese será un puerto diferente para ti, porque se elige al azar cuando iniciamos Docker.
También hemos aprendido que podemos hablar con la base de datos directamente a través de:
docker-compose exec database psql --user symfony --password app
Para conseguir que nuestra aplicación real apunte a la base de datos que se ejecuta en este puerto, podríamos entrar en .env
o .env.local
y personalizar DATABASE_URL
en consecuencia: con el usuario symfony
la contraseña ChangeMe
... y con el puerto que tengas actualmente. Aunque... tendríamos que actualizar ese puerto cada vez que iniciemos y detengamos Docker.
Afortunadamente, no tenemos que hacer nada de eso porque, sorpresa, ¡la variable de entorno DATABASE_URL
ya está correctamente configurada! Cuando configuramos nuestro proyecto, iniciamos un servidor local de desarrollo utilizando el binario de Symfony.
Como recordatorio, voy a ejecutar
symfony server:stop
para detener ese servidor. Y luego reiniciarlo con:
symfony serve -d
Menciono esto porque el binario symfony
tiene un superpoder de Docker bastante impresionante.
Observa: cuando actualices ahora... y pases el ratón por la esquina inferior derecha de la barra de herramientas de depuración de la web, dirá "Env Vars: De Docker".
En resumen, ¡el binario de Symfony se dio cuenta de que Docker se estaba ejecutando y expuso algunas nuevas variables de entorno que apuntaban a la base de datos! Te lo mostraré. Abrepublic/index.php
. Normalmente no nos preocupamos por este archivo... pero es un buen lugar para volcar algo de información justo cuando nuestra aplicación empieza a arrancar. Dentro de la llamada de retorno,dd()
la superglobal $_SERVER
. Esa variable contiene mucha información, incluyendo cualquier variable de entorno.
Bien, gira y actualiza. ¡Una gran lista! Busca DATABASE_URL
y... ¡ahí está! Pero ese no es el valor que tenemos en nuestro archivo .env
: el puerto no es el que tenemos ahí. No, ¡es el puerto correcto necesario para hablar con el contenedor Docker!
Sí, el binario de Symfony detecta que Docker se está ejecutando y establece una variable de entorno realDATABASE_URL
que apunta a ese contenedor. Y recuerda que, al tratarse de una variable de entorno real, ganará a cualquier valor colocado en los archivos .env
o .env.local
.
La cuestión es que, con sólo iniciar Docker, ya está todo configurado: no hemos tenido que tocar ningún archivo de configuración. Eso está muy bien.
Por cierto, si quieres ver todas las variables de entorno que configura el binario de Symfony, puedes ejecutarlo:
symfony var:export --multiline
Pero por mucho la más importante es DATABASE_URL
.
Bien: ¡Doctrine está configurado! A continuación, vamos a crear la base de datos propiamente dicha mediante un comando bin/console
. Cuando lo hagamos, aprenderemos un truco para hacerlo con las variables de entorno del binario de Symfony.
Hey Algirdas,
When you use Docker + Symfony, you got to run any commands through the Symfony CLI. For example symfony console doctrine:database:create
or to spin up the web server symfony serve -d
I hope it helps. Cheers!
Hi, so not sure what fixed it. Today I tried launching and had issues connecting to database not to mention the issue I already had. Reinstalled postgresql on my machine and now it works
Hey Algirdas!
Weird! Database gremlins hiding somewhere :). Anyways, I'm glad it's behaving for you now!
Cheers!
Hi,
are you planning to make a video on how to dockerise the full app ie database + php + web server ?
I am struggling with docker configs
Hey mofogasy
There is no plan to make a tutorial about it soon but thank you for telling us what you would like to learn. We take in consideration all feedback when we select the topic of the next tutorial
Thanks!
// composer.json
{
"require": {
"php": ">=8.1",
"ext-ctype": "*",
"ext-iconv": "*",
"babdev/pagerfanta-bundle": "^3.7", // v3.7.0
"doctrine/doctrine-bundle": "^2.7", // 2.7.0
"doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.2
"doctrine/orm": "^2.12", // 2.12.3
"knplabs/knp-time-bundle": "^1.18", // v1.19.0
"pagerfanta/doctrine-orm-adapter": "^3.6", // v3.6.1
"pagerfanta/twig": "^3.6", // v3.6.1
"sensio/framework-extra-bundle": "^6.2", // v6.2.6
"stof/doctrine-extensions-bundle": "^1.7", // v1.7.0
"symfony/asset": "6.1.*", // v6.1.0
"symfony/console": "6.1.*", // v6.1.2
"symfony/dotenv": "6.1.*", // v6.1.0
"symfony/flex": "^2", // v2.2.2
"symfony/framework-bundle": "6.1.*", // v6.1.2
"symfony/http-client": "6.1.*", // v6.1.2
"symfony/monolog-bundle": "^3.0", // v3.8.0
"symfony/proxy-manager-bridge": "6.1.*", // v6.1.0
"symfony/runtime": "6.1.*", // v6.1.1
"symfony/twig-bundle": "6.1.*", // v6.1.1
"symfony/ux-turbo": "^2.0", // v2.3.0
"symfony/webpack-encore-bundle": "^1.13", // v1.15.1
"symfony/yaml": "6.1.*", // v6.1.2
"twig/extra-bundle": "^2.12|^3.0", // v3.4.0
"twig/twig": "^2.12|^3.0" // v3.4.1
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.2
"symfony/debug-bundle": "6.1.*", // v6.1.0
"symfony/maker-bundle": "^1.41", // v1.44.0
"symfony/stopwatch": "6.1.*", // v6.1.0
"symfony/web-profiler-bundle": "6.1.*", // v6.1.2
"zenstruck/foundry": "^1.21" // v1.21.0
}
}
Hello, having issues making Symfony see my docker.
Symfony is running. Docker is running.
But when I open localhost server does not see my database running and DATABASE_URL port is not changed...
Not sure what is the issue
Docker version 20.10.17, build 100c701
Using Ubuntu
In next tutorial video I tried running: ./bin/console doctrine:database:create
And I got this:
An exception occurred in the driver: could not find driver