无法使用 Docker 和 Laravel Sail 连接到测试数据库

Can't connect to test database with Docker and Laravel Sail

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

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 连接时,我得到:

Access denied for user 'test_root'@'172.24.0.1' (using password: YES)

Host: 127.0.0.1 Port: 3306 User: test_root Password: test_root Database: 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

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

  • mysql 是 运行 和 link 将其 3306 端口与您计算机的 3306 端口连接。您可以使用主机 localhost127.0.0.1 连接到它。正是这个 dbms 给了你 'Access Denied' 错误。
  • mysql_test 是 运行 但它的 3306 端口未 link 连接到您主机上的任何端口,这意味着您无法直接访问它。

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