使用Laravel sail未找到测试数据库
我第一次使用Laravel Sail,可以连接到我的数据库,也可以使用TablePlus连接到测试数据库,之后使用凭据主机:127.0.0.1,端口:3307,用户:test_root,密码:test_root。然而,当我跑的时候使用Laravel sail未找到测试数据库,laravel,docker,phpunit,Laravel,Docker,Phpunit,我第一次使用Laravel Sail,可以连接到我的数据库,也可以使用TablePlus连接到测试数据库,之后使用凭据主机:127.0.0.1,端口:3307,用户:test_root,密码:test_root。然而,当我跑的时候 sail test --testsuite Feature --filter=LoginAsTest 我得到: SQLSTATE[HY000][1049]未知数据库“test\u database”(SQL:在table\u type='BASE table'中显示
sail test --testsuite Feature --filter=LoginAsTest
我得到:
SQLSTATE[HY000][1049]未知数据库“test\u database”(SQL:在table\u type='BASE table'中显示完整表)
在我的.env文件中,我有:
TEST_DB_CONNECTION=mysql
TEST_DB_HOST=mysql_test
TEST_DB_PORT=3306
TEST_DB_DATABASE=test_database
TEST_DB_USERNAME=test_root
TEST_DB_PASSWORD=test_root
我的docker-compose.yml有:
mysql:
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping"]
mysql_test:
image: "mysql:8.0"
ports:
- '${FORWARD_DB_PORT:-3307}:3306'
environment:
MYSQL_ROOT_PASSWORD: "${TEST_DB_PASSWORD}"
MYSQL_DATABASE: "${TEST_DB_DATABASE}"
MYSQL_USER: "${TEST_DB_USERNAME}"
MYSQL_PASSWORD: "${TEST_DB_PASSWORD}"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
networks:
- sail
有没有想过为什么我可以通过TablePlus连接,而不是我的应用程序
更新:我还添加了:
'mysql_test' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('TEST_DB_PORT', '3306'),
'database' => env('TEST_DB_DATABASE', 'forge'),
'username' => env('TEST_DB_USERNAME', 'forge'),
'password' => env('TEST_DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
到我的config/database.php
在我的phpunit.xml中,我有:
<env name="DB_CONNECTION" value="mysql_test"/>
<env name="DB_DATABASE" value="test_database"/>
macOS上的docker容器在docker for mac创建的虚拟机内运行,流量通过虚拟机的网络接口路由 如中所述,macOS和docker引擎之间没有桥接。因此,尽管
docker ps
将显示端口已发布,但除非在0.0.0
上明确发布,否则无法在macOS的localhost
上访问容器
本文描述了运行在linux和macOS上的docker网络子系统之间的区别
要连接到容器,最简单的方法是使用机器的公共IP,因此在您的情况下:
'host' => env('DB_HOST', '<<your ip address>>'),
'port' => env('TEST_DB_PORT', '3307'),
“主机”=>env('DB_主机',''),
'port'=>env('TEST_DB_port','3307'),
我很确定在
.env
中,您的测试\u DB\u端口应该是3307
。我已经尝试了上述方法,但我得到了相同的错误。作为另一项检查,我尝试了sail mysql,然后显示数据库;测试数据库没有出现。@Eric您在哪个容器中运行sail,从哪里进行测试?你从赛欧那里得到的错误是什么?(这里是Noob)我不确定你指的是哪个集装箱。我正在运行sail测试,错误为“SQLSTATE[HY000][2002]连接被拒绝(SQL:SHOW FULL TABLES WHERE table_type='BASE table')”,您在哪里运行sail?您是在容器中运行还是在主机上运行?我想是我的主机?我只是在命令行中输入sail-mysql;当我运行mysql时,当我键入SHOW databases时会出现非测试数据库;如果有帮助的话。虽然我可以通过TablePlus进行连接,但这只是一个没有出现的测试。
'host' => env('DB_HOST', '<<your ip address>>'),
'port' => env('TEST_DB_PORT', '3307'),