所以我搜索了很多,每个人都说要么使.env文件中的数据库主机等于mysql,要么使docker容器ip都对我有用?
我很确定这是一个主机问题,但目前还不知道吗?
这是我的docker-compose.yml文件:
这是我在.env文件中的连接:
version: "2"
services:
web:
container_name: algm
build:
context: .
dockerfile: container-build/web/Dockerfile
environment:
- MYSQL_DATABASE=dbname
- MYSQL_USER=dbuser
- MYSQL_PASSWORD=654321
- MYSQL_HOST=db
ports:
- "8080:80"
volumes:
- .:/var/www
depends_on:
- db
db:
image: mysql:5.7
ports:
- "6603:3306"
environment:
- MYSQL_ROOT_PASSWORD=654321
- MYSQL_USER=dbuser
- MYSQL_PASSWORD=654321
- MYSQL_DATABASE=dbname
volumes:
- "mysql_data:/var/lib/mysql"
- ./data/schema.sql:/docker-entrypoint-initdb.d/schema.sql
volumes:
mysql_data: { driver: local }
所以我通过以下命令进入docker bash:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=654321
在那里我可以进行模型和迁移,但不能迁移?我收到错误消息:
sudo docker-compose exec web /bin/bash
更新,如果需要它,这是我的Dockerfile:
Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = dbname and table_name = migrations and table_type = 'BASE TABLE')
at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
661| // If an exception occurs when attempting to run a query, we'll format the error
662| // message to include the bindings with SQL, which will make this exception a
663| // lot more helpful to the developer instead of just the database's errors.
664| catch (Exception $e) {
> 665| throw new QueryException(
666| $query, $this->prepareBindings($bindings), $e
667| );
668| }
669|
Exception trace:
1 PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known")
/var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct("mysql:host=mysql;port=3306;dbname=dbname", "dbuser", "654321", [])
/var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Please use the argument -v to see more details.
答案 0 :(得分:2)
我已经尝试过您的配置,并且可以正常工作。您只需要将DB_HOST=mysql
更改为您的容器名称DB_HOST=db
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=654321
然后转到容器内的应用文件夹,并运行php artisan config:clear
,php artisan cache:clear
,然后执行迁移。