无法连接到通过docker-compose创build的MySQL docker容器
我想开始使用docker,并创build一个简单的容器环境,包含一个nginx容器,一个PHP-FPM容器和一个MySQL容器。
虽然nginx和PHP-FPM容器之间的链接工作得很好,但我似乎无法将PHP应用程序服务器与数据库服务器连接起来。
我使用docker-compose来最小化手动terminal工作。 我的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错误,找不到一个原因,这是行不通的。 我可能错过的任何帮助或build议都不胜感激。
这不是一个Docker问题,而是一个代码问题:
你有: $db = new \PDO('mysql:host=db;dbname=demoName', 'demoUser', 'demoPass');
它应该是: $db = new \PDO('mysql:host=db;port=3306;dbname=demoDb', 'demoUser', 'demoPass');
如果您使用MySql为您的容器创build了0.0.0.0
主机,并且想从外部的docker(WorkBench或SequelPro)连接数据库,那么只需使用您的docker-machine IP即可。 例:
user$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox Running tcp://192.168.99.100:2376 v1.12.0
然后你的主机到MySQL是192.168.99.100
与适当的端口,例如3306
您正在使用sameersbn/mysql
作为MySQL的基本映像,根据此dockerfile显示 EXPOSE 3306/tcp
。
我认为你需要暴露容器中的端口3306到3306。 您可以通过将以下内容添加到您docker-compose.yml
文件中来执行此操作:
db: image: sameersbn/mysql volumes: - /var/lib/mysql environment: - DB_NAME=demoDb - DB_USER=demoUser - DB_PASS=demoPass ports: - "3306:3306"
我个人会使用原始的MySQL映像而不是你正在使用的映像。
然而,作为您正在尝试实现的一个完整解决scheme(Nginx, PHP-FPM and MySQL)
考虑使用LaraDock这个开源项目是为Laraveldevise的,但是您可以轻松修改它以使其与您的PHP代码一起工作。
- 拉扯jenkins图像时获取“需要身份validation”错误
- Docker撰写 – 安装带有MySQLi,MySQLnd和PDO扩展的php-fpm
- MySQL映像忽略docker-compose.yml的卷configuration
- Docker Swarm可以升级/降低主机吗?
- Docker与Django组合:'ascii'编解码器无法解码位置7中的字节0xcd:序号不在范围内(128)
- docker工人不在“本地主机/子页面”
- 错误:在文件'./docker-compose.yml'中,服务'build'必须是映射而不是string
- docker工人运行mysql客户端运行mysql容器
- Docker代理窗口守护进程命名pipe道到Ubuntu容器