从Homestead迁移到Sail后无法访问mysql数据库

ben*_*a16 1 mysql laravel docker laravel-sail

我正在尝试将 Laravel 8 项目从 Homestead 迁移到 Sail。Sail 似乎设置正确,因为我可以在本地访问我的项目网站。但我无法进入 mysql 来查看数据库:

\n
\xe2\x9e\x9c  myproject git:(master) \xe2\x9c\x97 sail mysql\nERROR 1045 (28000): Access denied for user 'myproject'@'localhost' (using password: YES)\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试过重新启动 Docker,并重新启动终端并运行,sail build --no-cache && sail up但没有成功。

\n

这是我的文件的相关部分.env

\n
DB_CONNECTION=mysql\nDB_HOST=localhost\nDB_PORT=3306\nDB_DATABASE=myproject\nDB_USERNAME=myproject\nDB_PASSWORD=secret\n
Run Code Online (Sandbox Code Playgroud)\n

这是docker-compose.yml文件:

\n
# For more information: https://laravel.com/docs/sail\nversion: '3'\nservices:\n    laravel.test:\n        build:\n            context: ./vendor/laravel/sail/runtimes/8.1\n            dockerfile: Dockerfile\n            args:\n                WWWGROUP: '${WWWGROUP}'\n        image: sail-8.1/app\n        extra_hosts:\n            - 'host.docker.internal:host-gateway'\n        ports:\n            - '${APP_PORT:-80}:80'\n            - '${HMR_PORT:-8080}:8080'\n        environment:\n            WWWUSER: '${WWWUSER}'\n            LARAVEL_SAIL: 1\n            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'\n            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'\n        volumes:\n            - '.:/var/www/html'\n        networks:\n            - sail\n        depends_on:\n            - mysql\n    mysql:\n        image: 'mysql/mysql-server:8.0'\n        ports:\n            - '${FORWARD_DB_PORT:-3306}:3306'\n        environment:\n            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ROOT_HOST: "%"\n            MYSQL_DATABASE: '${DB_DATABASE}'\n            MYSQL_USER: '${DB_USERNAME}'\n            MYSQL_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_ALLOW_EMPTY_PASSWORD: 1\n        volumes:\n            - 'sail-mysql:/var/lib/mysql'\n            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'\n        networks:\n            - sail\n        healthcheck:\n            test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]\n            retries: 3\n            timeout: 5s\nnetworks:\n    sail:\n        driver: bridge\nvolumes:\n    sail-mysql:\n        driver: local\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:\n当我将 .env 更改为

\n
DB_CONNECTION=mysql\nDB_HOST=mysql\nDB_PORT=3306\nDB_DATABASE=myproject\nDB_USERNAME=sail\nDB_PASSWORD=password\n
Run Code Online (Sandbox Code Playgroud)\n

那么错误是

\n
\xe2\x9e\x9c  myproject git:(master) \xe2\x9c\x97 sail mysql\nERROR 1044 (42000): Access denied for user 'sail'@'%' to database 'myproject'\n
Run Code Online (Sandbox Code Playgroud)\n

Gui*_*lle 6

我刚刚尝试连接到一个新的 laravel 9 应用程序,我认为您只需要更改几行即可连接到 Sail 的 Mysql:

.env

DB_CONNECTION=mysql 
DB_HOST=host.docker.internal
DB_PORT=3306
DB_DATABASE=myproject 
DB_USERNAME=sail # <-- "sail" as default user name
DB_PASSWORD=password # <-- "password" as default password
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为“mysql”是sail 用于与数据库交互的docker 容器中数据库部分的实例的名称。

所有其他设置仍然相同。

然后像之前一样sail build --no-cache && sail up