Can';t使用Docker和Laravel Sail连接到测试数据库

Can';t使用Docker和Laravel Sail连接到测试数据库,laravel,docker,phpunit,Laravel,Docker,Phpunit,我正试图用拉威尔的赛欧建立我的第一个测试数据库。我可以看到创建了测试数据库并添加了一个用户: mysql_test_1 | 2021-03-13 20:20:32+00:00 [Note] [Entrypoint]: Creating database test_database mysql_test_1 | 2021-03-13 20:20:32+00:00 [Note] [Entrypoint]: Creating user test_root mysql_test_1 |

我正试图用拉威尔的赛欧建立我的第一个测试数据库。我可以看到创建了测试数据库并添加了一个用户:

mysql_test_1    | 2021-03-13 20:20:32+00:00 [Note] [Entrypoint]: Creating database test_database
mysql_test_1    | 2021-03-13 20:20:32+00:00 [Note] [Entrypoint]: Creating user test_root
mysql_test_1    | 2021-03-13 20:20:32+00:00 [Note] [Entrypoint]: Giving user test_root access to schema test_database
但是,当我尝试通过TablePlus连接时,我得到:

拒绝访问用户“test_root@'172.24.0.1”(使用密码:YES)

主机:127.0.0.1端口:3306用户:测试根密码:测试根 数据库:test_数据库

My.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"
  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

您正在启动两个不同的mysql容器:

  • mysql
    正在运行并将其3306端口与您的计算机3306端口链接。您可以使用主机
    localhost
    127.0.0.1
    连接到它。正是这个dbms给了您“拒绝访问”错误
  • mysql\u test
    正在运行,但其3306端口未链接到主机上的任何端口,这意味着您无法直接访问它
由于您似乎是从主机(而不是从docker容器)运行TablePlus,我建议使用“端口”选项将主机的端口3307(或任何其他端口)链接到容器的端口3306,就像您在第一个容器中所做的那样。
然后,配置TablePlus,使其连接到端口3306上的第一个dbms和端口3307上的第二个dbms。

我尝试了您的建议,得到了“未知MySQL服务器主机‘MySQL_测试’(0)”。还有其他想法吗?在docker compose中,您的服务名为
mysql\u test
?另外,您是否在容器中运行TablePlus?我添加了docker compose文件以了解更多信息。我不知道如何判断TablePlus是否在容器中运行。但是,如果有帮助,我可以连接到TablePlus中的非测试数据库。(对于这一个,我使用127.0.0.1作为我的主机)我将根据编辑后的答案编辑我的答案它是否与编辑后的答案一起工作?