Laravel 9 Sail port forward error for mysql



我已经将应用程序mysql端口端口移植到3307,因为我需要我的主机mysql继续以3306运行,但它给出了以下错误。

运行sail up后,我还可以获得欢迎页面

我正在使用 laravel 9 最新版本

错误

IlluminateDatabaseQueryException
PHP 8.1.9
9.26.1
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: Temporary failure in name resolution
SELECT count(*) AS aggregate FROM `users` WHERE `email` = test@test.com

.env

APP_URL=http://127.0.0.1
APP_PORT=81
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
FORWARD_DB_PORT=3307

docker-composer.yml

# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.1
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.1/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-81}:80'
- '${VITE_PORT:-5174}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3307}:3306'
environment:
MYSQL_ROOT_PASSWORD: '{DB_PASSWORD}'
MYSQL_ROOT_HOST: '{DB_HOST}'
MYSQL_DATABASE: '{DB_DATABASE}'
MYSQL_USER: '{DB_USERNAME}'
MYSQL_PASSWORD: '{DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- 'sail-mysql:/var/lib/mysql'
- './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-mysql:
driver: local

更新 1

我的终端输出如下

sm_v2-laravel.test-1   "start-container"   laravel.test        exited (0)          
Shutting down old Sail processes...
[+] Running 0/1
⠙ Network sm_v2_sail  Creating                                                                                      0.2s
[+] Running 3/3d orphan containers ([sm_v2-service-1]) for this project. If you removed or renamed this service in your co ⠿ Network sm_v2_sail              Created                                                                           0.2s
⠿ Container sm_v2-mysql-1         Created                                                                           1.5s
⠿ Container sm_v2-laravel.test-1  Created                                                                           0.5s
Attaching to sm_v2-laravel.test-1, sm_v2-mysql-1
sm_v2-mysql-1         | [Entrypoint] MySQL Docker Image 8.0.30-1.2.9-server
sm_v2-mysql-1         | [Entrypoint] Starting MySQL 8.0.30-1.2.9-server
sm_v2-mysql-1         | 2022-08-30T15:19:04.087084Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
sm_v2-mysql-1         | 2022-08-30T15:19:04.092964Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.30) starting as process 1
sm_v2-mysql-1         | 2022-08-30T15:19:04.148193Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
sm_v2-mysql-1         | 2022-08-30T15:19:04.303213Z 1 [ERROR] [MY-012960] [InnoDB] Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files.
sm_v2-mysql-1         | 2022-08-30T15:19:04.755173Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
sm_v2-mysql-1         | 2022-08-30T15:19:04.755609Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
sm_v2-mysql-1         | 2022-08-30T15:19:04.755681Z 0 [ERROR] [MY-010119] [Server] Aborting
sm_v2-mysql-1         | 2022-08-30T15:19:04.757223Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.30)  MySQL Community Server - GPL.
sm_v2-mysql-1 exited with code 1
sm_v2-laravel.test-1  | 2022-08-30 15:19:07,746 INFO Set uid to user 0 succeeded
sm_v2-laravel.test-1  | 2022-08-30 15:19:07,751 INFO supervisord started with pid 1
sm_v2-laravel.test-1  | 2022-08-30 15:19:08,756 INFO spawned: 'php' with pid 16
sm_v2-laravel.test-1  | 2022-08-30 15:19:09,759 INFO success: php entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
sm_v2-laravel.test-1  | 
sm_v2-laravel.test-1  |    INFO  Server running on [http://0.0.0.0:80].  
sm_v2-laravel.test-1  | 
sm_v2-laravel.test-1  |   Press Ctrl+C to stop the server
sm_v2-laravel.test-1  | 
sm_v2-laravel.test-1  |   2022-08-30 15:19:21 ................................................... ~ 1s
sm_v2-laravel.test-1  |   2022-08-30 15:19:23 /favicon.ico ...................................... ~ 0s
sm_v2-laravel.test-1  |   2022-08-30 15:19:23 ................................................... ~ 1s
sm_v2-laravel.test-1  |   2022-08-30 15:19:24 /build/assets/app.ac81e540.css .................... ~ 0s
sm_v2-laravel.test-1  |   2022-08-30 15:19:24 /build/assets/app.ab93cf8a.js ..................... ~ 0s
sm_v2-laravel.test-1  |   2022-08-30 15:19:24 /favicon.ico ...................................... ~ 0s
sm_v2-laravel.test-1  |   2022-08-30 15:19:27 ................................................... ~ 0s
sm_v2-laravel.test-1  |   2022-08-30 15:19:29 /favicon.ico ...................................... ~ 0s
sm_v2-laravel.test-1  |   2022-08-30 16:07:14 ................................................... ~ 0s

更新 2

我现在收到不同的错误

SQLSTATE[HY000] [1045] Access denied for user 'root'@'192.168.128.3' (using password: YES)
经过

一个多星期的精神挫败,我终于解决了它。但奇怪的是,没有人能够在任何论坛上提供任何答案,是的,我尝试了所有可能的著名论坛。

我确保在我的主机(主计算机)机器上添加了两个用户,而不是docker mysql,并且我使用mysql cli授予他们完全授权,有2个这样的条目以及其他条目

root | %
root | localhost

我一个接一个地运行以下命令。我不知道哪些命令确切地解决了这个问题,因为我是 docker 和 sail 的初学者,但这是我尝试的步骤,之后它开始工作。

我越来越Docker is not running.,所以我尝试跟随使 docker 运行。

sudo systemctl enable docker.service
sudo systemctl enable docker.socket

之后我尝试了sail up但没有用,所以运行了以下

sudo systemctl stop docker
sudo systemctl start docker
sudo systemctl disable docker.service
sudo systemctl enable docker.service
sail up

之后我重新启动了我的电脑(我在 Ubuntu 22.04 上)

reboot

删除了一些不必要的文件,我也在 docker 服务中遇到了一些失败的错误,我通过运行下面代码的第 2 行和第 3 行解决了这个问题

sudo rm /etc/systemd/system/docker.service.d/override.conf
sudo systemctl reset-failed docker.service
sudo systemctl start docker.service
systemctl daemon-reload
sudo systemctl start docker.service
sail down
sail build --no-cache
sail up
php artisan config:clear

之后我迁移了数据库,它工作了

sail artisan migrate

然后

sudo systemctl enable docker
sail up
sail build
sail ps
sudo usermod -aG docker ${USER}

已移除daemon.json

sudo rm daemon.json

删除了旧卷

我认为这很有帮助

sail down --rmi all -v
sail up / (you can use sail up --no-cache)

现在mysql同时在主机端口3306以及用于docker3307的其他端口上工作3308

我感谢@Mihai的努力,因为只有@Mihai在评论中做出了回应

更新 2

我必须在docker-compose.yml文件中添加platform: 'linux/x86_64'

mysql:
image: 'mysql/mysql-server:8.0'
platform: 'linux/x86_64'
ports:
- '${FORWARD_DB_PORT:-3307}:3306'

最新更新