无法使用 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 端口连接。您可以使用主机 localhost
或 127.0.0.1
连接到它。正是这个 dbms 给了你 'Access Denied' 错误。
mysql_test
是 运行 但它的 3306 端口未 link 连接到您主机上的任何端口,这意味着您无法直接访问它。
由于您似乎是来自主机的 运行 TablePlus(而不是来自 docker 容器),我建议 link 端口 3307 (或任何其他端口) 从您的主机到容器的端口 3306,使用“端口”选项,就像您为第一个容器所做的那样。
然后,配置 TablePlus,使其连接到端口 3306 上的第一个 dbms 和端口 3307 上的第二个 dbms。
我正在尝试使用 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 端口连接。您可以使用主机localhost
或127.0.0.1
连接到它。正是这个 dbms 给了你 'Access Denied' 错误。mysql_test
是 运行 但它的 3306 端口未 link 连接到您主机上的任何端口,这意味着您无法直接访问它。
由于您似乎是来自主机的 运行 TablePlus(而不是来自 docker 容器),我建议 link 端口 3307 (或任何其他端口) 从您的主机到容器的端口 3306,使用“端口”选项,就像您为第一个容器所做的那样。 然后,配置 TablePlus,使其连接到端口 3306 上的第一个 dbms 和端口 3307 上的第二个 dbms。