【发布时间】:2023-02-26 09:00:55
【问题描述】:
当我在应用程序上工作时,该应用程序托管在我机器上本地的 docker 容器中。 php artisan migrate 命令运行良好。当我尝试使用任何模型将内容加载到网页时会出现问题。
解释如下:
环境内容:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=root
DB_PASSWORD=
迁移命令有效。
php artisan migrate
但是,当我尝试在页面上显示数据时:
public function index(){
return App\Models\User::all();
}
Laravel 说:
SQLSTATE[HY000] [2002] Connection refused
我的 mysql 的 docker-compose.yml 内容:
services:
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_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
当我将 DB_HOST 更改为容器的名称时;
DB_HOST=mysql
Laravel 开始显示数据,但是php artisan migrate 不起作用。
它如何尝试连接到它:
PDO::__construct("mysql:host=mysql;port=3306;dbname=my_db", "root", "", [])
然后失败:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed: No such host is known. (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')
我需要了解它为什么这样做,以及如何解决这个问题。 我还想知道当我在生产环境中部署应用程序时是否会遇到同样的问题。
谢谢。
【问题讨论】:
-
DB_HOST=localhost或 127.0.0.1,你试过了吗? -
是的,我试了
DB_HOST=localhost,它显示找不到主机。我试过DB_HOST=127.0.0.1,只有迁移开始工作,但数据仍然无法加载到网页上。 -
所以
DB_HOST=127.0.0.1正在为您服务。对于网页上没有显示的数据,你需要在Lavarel中检查一些其他的东西 -
迁移完成后页面上看不到数据吗??
-
如果我更改
DB_HOST=mysql然后php artisan migrate说Connection refused会显示数据
标签: laravel docker laravel-9 laravel-sail