【问题标题】:Can't connect to test database with Docker and Laravel Sail无法使用 Docker 和 Laravel Sail 连接到测试数据库
【发布时间】:2021-06-11 13:40:14
【问题描述】:

我正在尝试使用 Laravel 的风帆设置我的第一个测试数据库。我可以看到创建了测试数据库并添加了一个用户:

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_root 密码:test_root 数据库:test_database

我的 .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

【问题讨论】:

    标签: laravel docker phpunit


    【解决方案1】:

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

    • mysql 正在运行并将其 3306 端口与您计算机的 3306 端口链接。您可以使用主机localhost127.0.0.1 连接到它。正是这个 dbms 为您提供了“拒绝访问”错误。
    • mysql_test 正在运行,但其 3306 端口未链接到您主机上的任何端口,这意味着您无法直接访问它。

    由于您似乎是从您的主机(而不是从 docker 容器)运行 TablePlus,我建议将端口 3307 (或任何其他端口) 从您的主机链接到端口容器的 3306,使用“端口”选项,就像对第一个容器所做的那样。 然后,配置 TablePlus 使其连接到端口 3306 上的第一个 dbms 和端口 3307 上的第二个 dbms。

    【讨论】:

    • 我尝试了您的建议并得到“未知的 MySQL 服务器主机 'mysql_test' (0)”。还有其他想法吗?
    • 在您的 docker compose 中,您的服务是否称为 mysql_test ?另外,您是在容器中运行 TablePlus 吗?
    • 我已添加我的 docker-compose 文件以获取更多信息。我不确定如何判断 TablePlus 是否在容器中运行。但是,如果有帮助,我可以在 TablePlus 中连接到我的非测试数据库。 (对于那个,我使用 127.0.0.1 作为我的主机)
    • 是的,对于延迟回复我深表歉意!我仍然无法运行我的测试,因为找不到数据库。但是,这感觉像是一个单独的问题,所以我将删除我的问题的那部分并将其标记为正确。
    猜你喜欢
    • 2021-04-21
    • 2021-07-19
    • 2022-11-16
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多