Gitlab CI Symfony: SQLSTATE Conexión rechazada

Yo uso gitlab para ejecutar pruebas unitarias cada vez que alguien empuja el código. Me sale este error durante la instalación del compositor.

> Incenteev\ParameterHandler\ScriptHandler::buildParameters Creating the "app/config/parameters.yml" file > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache [Doctrine\DBAL\Exception\ConnectionException] An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused [Doctrine\DBAL\Driver\PDOException] SQLSTATE[HY000] [2002] Connection refused [PDOException] SQLSTATE[HY000] [2002] Connection refused Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-install-cmd event terminated with an exception 

Aquí está mi configuración:

Archivo .gitlab-ci.yml

  # Select image from https://hub.docker.com/_/php/ image: php:5.6 # Select what we should cache cache: paths: - vendor/ before_script: # Install ssh-agent if not already installed, it is required by Docker. # (change apt-get to yum if you use a CentOS-based image) - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' # Run ssh-agent (inside the build environment) - eval $(ssh-agent -s) # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store - ssh-add  ~/.ssh/config' - cp ci/custom.ini /usr/local/etc/php/conf.d/custom.ini - bash ci/docker_install.sh > /dev/null # Install composer - curl -sS https://getcomposer.org/installer | php services: - mysql:latest variables: # Configure mysql service (https://hub.docker.com/_/mysql/) MYSQL_DATABASE: symfony MYSQL_ROOT_PASSWORD: root # We test PHP5.6 (the default) with MySQL test:mysql: script: # Install all project dependencies - php composer.phar install - phpunit --coverage-text --colors=never -c app/ 

parameters.yml.dist

 parameters: database_host: 127.0.0.1 database_port: ~ database_name: symfony database_user: root database_password: root mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: ~ mailer_password: ~ # A secret key that's used to generate certain security-related tokens secret: ThisTokenIsNotSoSecretChangeIt database_slave1_host: 127.0.0.1 database_slave1_port: ~ database_slave1_name: symfony database_slave1_user: root database_slave1_password: root 

He leído y sigo las instrucciones del sitio web de gitlab. Tal vez mi error es obvio, pero no puedo verlo.

Solutions Collecting From Web of "Gitlab CI Symfony: SQLSTATE Conexión rechazada"

Como está utilizando MySQL que se ejecuta en otro contenedor, debe usar su nombre de host, no 127.0.0.1 . El host correcto de la base de datos debe ser “mysql” . Esto está cubierto en una de las secciones de la documentación de GitLab:

El contenedor de servicios para MySQL será accesible bajo el nombre de host mysql. Entonces, para acceder a su servicio de base de datos, debe conectarse al servidor llamado mysql en lugar de un socket o localhost.

Uno de los posibles problemas de este error es que intenta acceder a la base de datos mientras aún se inicia. Esto está cubierto en la sección Advertencias de MySQL en el Docker HUB.

Si no hay ninguna base de datos inicializada cuando se inicia el contenedor, se creará una base de datos predeterminada. Si bien este es el comportamiento esperado, esto significa que no aceptará conexiones entrantes hasta que se complete dicha inicialización. Esto puede causar problemas al usar herramientas de automatización …

Una solución poco sofisticada es usar sleep comando sleep antes de iniciar cualquier proceso que acceda a la base de datos. Puede agregarlo a la sección before_script :

 before_script: - sleep 60s 

Una solución mejor y más compleja sería sondear el servidor MySQL comprobando repetidamente si ya acepta conexiones.