用Docker部署PHP+MySQL服务器(续)

用Docker部署PHP+MySQL服务器(续)

本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:用Docker部署PHP+MySQL服务器(续)
MySQL的迁移
升级

之前用的MySQL版本太老了,试图用原来的数据目录启动新版本的MySQL Docker会失败,就只能一步步,从低的版本启动升级数据。具体方法就是在docker run的时候设置好所用的MySQL版本,能够正常运行后再换更高的版本。MySQL会完成数据目录的升级。

账号迁移

原来MySQL直接在宿主机上,所以几乎所有账号的主机都设置成了"localhost"。现在MySQL在容器里,而PHP和它不在同一个容器里,会访问不到它。在这种情况下,MySQL的账号主机设置有些多余,在宿主机外肯定是不能访问的,只有从其他容器内才能访问。我决定将root以外的账号都改成可以从任意主机访问。

原本我就有phpMyAdmin来管理数据库,现在的问题就是PHP连不上MySQL,所以要让root能从PHP那里访问。默认情况下,Docker内容器所在的虚拟网络为172.17.0.0/24,所以只要加'root'@'172.17.0.%'这个账号,就可以从PHP里连上MySQL了。

用docker exec可以运行容器里的程序,下面我就运行mysql容器里的mysql命令,并要求输入密码:

在打开的mysql终端里新建用户并给予权限:

这样就可以从phpMyAdmin里面登录了,后面就是用界面将MySQL的账号一一修改掉,不再赘述。值得注意的一点是要先删除已有的账号,再加入新的账号,不然仍然会访问不了。这可能是MySQL的问题。

PHP发邮件

因为有Wordpress网站,PHP发邮件的功能还是很有必要的。原本PHP和邮件服务器Postfix同在宿主机上,PHP会调用Postfix提供的sendmail命令来发送邮件。如果PHP在容器里,这件事情就做不到了。本来我想着PHP可以用邮件服务器而不是用命令发邮件,但Ubuntu下的PHP好像并不支持这个功能,只有Win32下的PHP才可以。所以看上去唯一的解决方案就是将Postfix也安装到PHP的容器里面去。

修改my-php-fpm中的Dockerfile:

在Dockerfile里增加安装和运行Postfix的部分。因为安装过程中需要交互,输入信息,而docker build是不能交互的,这里用了debconf-set-selections来事先输入信息。另外,如果不使用mkfifo /var/spool/postfix/public/pickup,则sendmail会报错。原本php-fpm的Dockerfile最后是CMD php-fpm,这里就增加postfix start命令来让它先运行,然后再启动php-fpm。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据