在AWS ec2
服务器上安装了docker 1.9.1
。
在基于test_image
官方docker镜像的图像ubuntu:trusty
中,我尝试设置LEMP(Linux,Nginx,MySQL,PHP)架构。
以下是我用来启动容器的docker命令:
docker run --name test_1 -d -p 80:80 -p 3306:3306 test_image /bin/sh -c "while true; do echo daemonized docker container; sleep 5000; done"
我已将端口80
和3306
暴露给主机的网络接口,并且还允许AWS的安全组允许到这些端口的入站连接。安全组中的连接类型为:MYSQL/Aurora
,协议为:TCP
(我知道它不是非常安全,它仅用于初始实施。生产设置将不同)
我遵循了DigitalOcean教程:https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04
安装Nginx并启动后,我可以通过ec2的公共IP在浏览器中测试它,即http://xxx.xxx.xxx.xxx显示默认的nginx欢迎页面。
在安装MySQL时,我在docker容器中执行了以下命令:
apt-get install mysql-server
mysql_install_db
/etc/init.d/mysql start
mysql_secure_installation
我已经为root
用户提供了密码,并且mysql_secure_installation
期间我允许远程访问root用户。
mysql -u root -p
命令将我连接到mysql数据库,但不是从容器外部连接。
同样来自我的本地机器:
我尝试使用mysql-client:
mysql -h xxx.xxx.xxx.xxx -u root -p
我收到以下错误:ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (111)
并且还通过mysql workbench但我仍然无法连接到mysql db。
我做错了什么?
答案 0 :(得分:1)
在您的主机mysql的my.cnf中将绑定地址设置为0.0.0.0,以便mysql侦听所有网络接口
bind-address = 0.0.0.0
默认配置为:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1