【发布时间】:2016-05-26 14:20:17
【问题描述】:
我想开始使用 docker,并创建了一个简单的容器环境,其中包含一个 nginx 容器、一个 PHP-FPM 容器和一个 MySQL 容器。
虽然 nginx 和 PHP-FPM 容器之间的链接运行良好,但我似乎无法将 PHP 应用程序服务器与数据库服务器链接。
我使用 docker-compose 来最大程度地减少手动终端工作。我的 docker-compose.yml 看起来像这样:
web:
image: tutorial/nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www
- ./src/vhost.conf:/etc/nginx/sites-enabled/vhost.conf
links:
- php
php:
image: nmcteam/php56
volumes:
- ./src/php-fpm.conf:/etc/php5/fpm/php-fpm.conf
- ./src:/var/www
links:
- db
db:
image: sameersbn/mysql
volumes:
- /var/lib/mysql
environment:
- DB_NAME=demoDb
- DB_USER=demoUser
- DB_PASS=demoPass
当我尝试使用以下语句连接到数据库时:
$db = new \PDO('mysql:host=db;dbname=demoName', 'demoUser', 'demoPass');
MySQL 容器本身正在工作,因为我可以连接到容器 bash 并使用 MySQL CLI:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| demoDb |
| mysql |
| performance_schema |
+--------------------+
我只是收到一个 500 错误,但找不到这不起作用的原因。对于我可能错过的任何帮助或建议,我们将不胜感激。
【问题讨论】:
-
如果本地连接,你的连接字符串应该是
$db = new \PDO('mysql:host=localhost;dbname=demoName', 'demoUser', 'demoPass');,否则你需要暴露端口并使用主机的ip。链接仅在内部将链接容器公开给它链接到的应用程序。 db不能引用,必须localhost或127.0.0.1引用 -
@GHETTO.CHiLD 感谢您的努力。我评论了你提供的答案。
-
你是从 nginx 盒子连接的吗?
-
@GHETTO.CHiLD 我不确定我是否收到您的问题...由于 PHP 应用程序服务器解释了我的所有 PHP 代码,它应该通过此容器进行连接。如果我在这里弄错了,请纠正我。
-
试试这个:
$db = new \PDO('mysql:host=db;port=3306;dbname=demoDb', 'demoUser', 'demoPass');你有DB_NAME=demoDb但正在设置'mysql:host=db;dbname=demoName'。改变它,重新连接,看看它是否有效。我认为这不是 Docker 问题,而是代码问题。
标签: mysql docker docker-compose