Tengo un problema al conectarme a mysql ejecutándose en la máquina local en mi DockerFile que he mencionado
FROM php:7 RUN apt-get update -y && apt-get install -y openssl zip unzip git RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN docker-php-ext-install pdo mbstring pdo_mysql WORKDIR /home COPY . /home RUN composer install --ignore-platform-reqs CMD php artisan serve --host=0.0.0.0 --port=8081 EXPOSE 8081y esto en mi configuración .env
DB_HOST=localhost DB_DATABASE=databasename DB_USERNAME=root DB_PASSWORD=testpasswordTengo muy menos idea de dónde está fallando. ¿Necesito instalar mysql para el contenedor Docker también?
Una solución mucho más simple ( para Mac OSX y Docker para Windows ) es reemplazar la dirección del host de localhost a host.docker.internal
DB_HOST=host.docker.internal DB_DATABASE=databasename DB_USERNAME=root DB_PASSWORD=testpassword Básicamente, el nombre DNS host.docker.internal se resolverá en la dirección IP interna utilizada por el host.
NB : si ha cambiado su dirección a host.docker.internal pero aún recibe un error de connection refused , lo más probable es que MySQL esté configurado actualmente para escuchar solo la red local.
Para resolver eso, actualice el valor de bind_address a 0.0.0.0 en su archivo de configuración my.cnf .
está intentando conectarse a mysql en localhost , que es (sorprendentemente) la referencia al host local. dado que es una dirección relativa, dentro del contenedor se está resolviendo como la propia dirección del contenedor, y no hay mysql esperándote allí... así que para resolverlo, solo dale tu IP de host real en lugar de localhost o 127.0.0.1 .
DB_HOST=<your_host_ip> #run `ifconfig` and look for your ip on `docker0` network DB_DATABASE=databasename DB_USERNAME=laravel_server #not root, since we are going to allow this user remote access. DB_PASSWORD=testpassword abra su mysql: mysql -u root -p , proporcione su contraseña de root y ejecute lo siguiente:
CREATE USER 'laravel_server'@'%' IDENTIFIED BY 'testpassword'; GRANT ALL PRIVILEGES ON databasename.* TO 'laravel_server'@'%'; FLUSH PRIVILEGES;creamos el usuario y le dimos los permisos.
tenemos que hacer que escuche en todas las interfaces y no solo en localhost y, por lo tanto, ejecutamos:
sudo sed 's/.*bind-address.*/bind-address=0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
(Se le pedirá la contraseña. Este comando solo reemplaza la línea en el archivo de configuración de mysql)
php artisan config:cacheservice mysql restartluego docker construye y ejecuta un nuevo contenedor nuevamente. debería funcionar para ti.
Veo dos opciones -
Use la IP privada de su host docker, es decir, donde se ejecuta el servidor mysql.
Use el modo de red de host mientras ejecuta el contenedor en caso de que quiera usar localhost.
docker container --net=host ...