Tengo una aplicación Laravel 5.8 creada localmente en Docker.

Puedo ejecutar la aplicación en mi navegador, conectarme a la base de datos en Sequel Pro, pero cuando intento migrar la base de datos, aparece el temido error [2002] Connection refused.

He configurado el puerto mysql en 3307 ya que tengo otro contenedor mysql que usa 3306 para un proyecto diferente. No quiero tener que parar e iniciar Docker para cada proyecto, ya que podría estar cambiando entre los 2 regularmente, es por eso que estoy usando diferentes puertos.

Aquí está la sección mysql en el archivo docker-compose.

mysql:
    image: mysql:5.7
    ports:
      - "3307:3306"
    environment:
      MYSQL_HOST: 127.0.0.1
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: forecast
      MYSQL_USER: forecast
      MYSQL_PASSWORD: secret
    volumes:
      - mysql:/var/lib/mysql
    networks:
      - forecast

Aquí está mi clave de configuración de DB de archivo .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3307
DB_DATABASE=forecast
DB_USERNAME=forecast
DB_PASSWORD=secret

También vale la pena señalar que estoy ejecutando la aplicación en el puerto 81, en lugar de 80 por la misma razón. En mi navegador, tengo que poner {domain.testing}:81 que funciona.

0
John Halsey 10 may. 2019 a las 13:24

3 respuestas

La mejor respuesta

He descubierto esto para cualquiera que tenga el mismo problema.

Tuve que ajustar mi archivo .env.

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Así que cambié el DB_HOST a mysql y el DB_PORT a 3306 a medida que Docker lo asigna a 3307. Luego funcionó con éxito.

1
John Halsey 10 may. 2019 a las 10:43

Cambie DB_HOST=127.0.0.1 a DB_HOST=mysql y debería funcionar. Porque en la red de contenedores su host es mysql no 127.0.0.1.

Y también debido al reenvío de puertos no hay necesidad de cambiar .env 3306 a 3307. docker lo hará según la configuración de la red. Déjalo como DB_PORT=3306

0
WebMan 10 may. 2019 a las 10:45

Cambie 127.0.0.1 a mysql

mysql:
    image: mysql:5.7
    ports:
      - "3307:3306"
    environment:
      MYSQL_HOST: mysql
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: forecast
      MYSQL_USER: forecast
      MYSQL_PASSWORD: secret
    volumes:
      - mysql:/var/lib/mysql
    networks:
      - forecast
0
Bilal Ali Jafri 10 may. 2019 a las 10:53