启动mysql容器
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
连接MySQL并手动创建新数据库
$ docker run -it --link mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
链接数据库并启动php容器
$ docker run -d --link mysql:mysql --name myapp -v "$PWD":/var/www/html -p 80:80 php:5.6-apache
第一个问题:
访问我的php网站时:http://localhost/index.php,我得到以下错误:
Fatal Error: Mysql is not supported in your PHP, recompile and try again.
以下是phpinfo页面中显示的configure命令,mysql模块似乎已包含在编译中。
配置命令"/configure"--配置文件路径=/usr/local/etc/php'--配置文件扫描目录=/usr/local/etc/php/conf.d'--带-apxs2''--禁用cgi"--启用mysqlnd"--带curl"--使用openssl"--用readline"--有recode"--带有zlib""
php官方图片中有遗漏吗?
第二个问题:
访问时http://localhost/info.php,我可以看到phpinfo页面。
但它也显示会话"环境"中的数据库密码:
MYSQL_ENV_MYSQL_ROOT_PASSWORD my-secret-pw
和会话中的"PHP变量"
_ENV["MYSQL_ENV_MYSQL_ROOT_PASSWORD"] my-secret-pw
那么如何在phpinfo()中隐藏密码呢?
我假设您试图在docker环境中运行phplist。
您看到的消息(Fatal Error: Mysql is not supported in your PHP, recompile and try again.
)是一条phplist错误消息,硬编码在./admin/mysql.inc
和./admin/mysqli.inc
文件中。
在检查存在的mysql_connect
和mysqli_connect
功能时显示此消息。您看到此消息是因为您的环境中不存在函数。
您必须找到提供此功能的软件包,然后将其安装在docker映像上,或者使用此支持构建一个新的docker映像。
官方的PHP docker镜像是基于Debian的,它提供了php5-mysql
包。docker映像中不存在此项,因此您使用apt-get
安装此软件包,然后使用docker-php-ext-install
、docker-php-ext-configure
和docker-php-ext-enable
启用mysql
和mysqli
扩展。