【发布时间】:2015-05-26 15:08:42
【问题描述】:
我在 docker 容器中创建了一个新的 Laravel 5 应用程序。我可以访问主页 url 并收到欢迎消息。我尝试创建新路线,它们也在工作。然后我运行一个 MariaDB docker 容器来链接到 Laravel 5 应用程序。这是问题开始的地方。 当我尝试使用以下命令在 Laravel 5 中运行迁移时:
php artisan migrate --force
我收到以下错误消息:
Can't connect to MySQL server on '127.0.0.1'
我的 .env 文件是这样的:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=blog
DB_USERNAME=blog
DB_PASSWORD=123456
我知道这些变量是 Laravel 用来连接数据库的,因为它们存在于 Laravel 日志文件中,如下所示:
PDO->__construct(‘mysql:127….’, ‘blog’, ‘123456’, Array)
数据库引擎是 MariaDB,它在 docker 容器中运行。这个 docker 容器暴露了 3306 端口并链接到运行 Laravel 的容器。要链接容器,我使用以下 docker 命令:
docker run –i –t - - link mariadb:mysql miguelbgouveia/laravel:v3 /bin/bash
我还知道我的 MariaDB docker 容器正在以正确的配置运行,因为我使用了一个链接到它的 phpmyadmin docker 容器,并且我可以成功连接到数据库。我将 MariaDB 容器与 phpmyadmin 容器链接起来,方式与将其链接到 Laravel 容器的方式相同(--link mariadb:mysql)
为什么我无法连接到数据库?是否缺少要安装的配置或 php 模块?
【问题讨论】:
-
你的 dockers 容器有不同的 ip 对吧?
-
是的@RobertRozas,我的容器有不同的 IP。
-
您必须在您的 maria-db 客户端中创建一个用户,链接到您的 apache docker 的 ip(即:apache docker ip: 192.168.1.112,然后在您的数据库 docker 中创建用户 remoteuser@ 192.168.1.112)
-
它可以工作@RobertRozas,但我的问题是容器启动后只知道 MariaDB 的 IP。我想在运行它们之前配置容器。这可以使用容器之间的链接吗?