听说有人在Docker上搭建WordPress环境失败了。但是经过努力,成功了,现在分享一下经验
这是我第一次投稿。这只是一个备忘录,所以我会简单地写一下。
-
- dockerでWordPressローカル開発環境を作りました。
- 今更だけどDockerでWordPress環境を用意してみたら超簡単だった
参考这篇文章后,我尝试在Docker上构建本地WordPress环境,但在我的环境中无法正常运行。我的环境如下所示:
-
- MacBookPro2018 + MacOSX Mojave(10.14.3)
- DockerDesktop 2.0.0.3(31259)
本地WEB服务器(WordPress端)和本地DB服务器(MySQL端)都在运行,但是WordPress端似乎无法连接到MySQL端,显示了“Error establishing a database connection”的错误信息。
经过调查,发现问题的原因是MySQL的版本是8系列。当从Docker Hub中拉取MySQL镜像时,如果未指定版本,则会下载最新的(Ver8系列的)版本。然而,WordPress似乎无法在MySQL Ver8系列下正常运行。
在进行了一番搜索后,似乎有很多种方法可以在MySQL Ver8系列上使WordPress正常运行。但为了尽快达到运行的目的,当我使用docker run命令运行容器时,我使用了Ver5.7系列的镜像,并进行了以下指定,结果顺利运行起来了。
docker pull mysql:5.7.25
docker pull wordpress:4.9.1
docker run --name mysql5.7.25 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7.25
docker run --name wordpress4.9.1 -v /Users/dee909/dev/docker:/tmp --link mysql5.7.25:mysql -d -p 8080:80 wordpress:4.9.1
我在WordPress Ver4.9.1和MySQL Ver5.7.25上进行了动作验证。如果您遇到了与我一样的困境,请尝试一下。出于安全等方面的考虑,我建议尽可能使用最新版本的WordPress和MySQL,并鼓励您如果有能力自行解决问题的话尝试一下。最后,感谢@pugiemonn先生和@maimax先生给予的提示。非常感谢!
追加1
在运行容器时,如果在MySQL端添加端口转发,那么就可以从Sequel Pro等工具访问数据库。以下是将端口3307转发到3306的设置。如果您喜欢使用图形界面操作,建议一并进行设置。
docker run --name mysql5.7.25 -e MYSQL_ROOT_PASSWORD=password -d -p 3307:3306 mysql:5.7.25

追加2
WordPress的-v选项是用于主机和容器内目录共享的绑定。请根据您自己的环境进行更改。如果不需要共享,则可以完全删除它而没有问题。
在示例的docker run命令中,我们将主机上的/Users/dee909/dev/docker目录绑定到容器内的/tmp目录。通过将其更改为-v /Users/dee909/dev/docker:/var/www/html,您可以在主机端(MacOSX或Windows)上部署的WordPress在容器的WEB服务器上运行。
这样做可以使用主机端的文本编辑器进行代码编辑,还可以对主机上的目录进行git管理,因此非常方便使用。
补充3
“在公司的人問我「是否能共享多個目錄?」結論是「可以」。非常簡單,只需在指令中指定多個參數:-v 主機目錄名:容器內目錄名。另外,通過將MySQL容器的資料庫文件目錄與主機共享,實現了數據庫的持久化(重新建立容器也不會使數據庫初始化)。最終,我在我的環境中選擇使用以下設定來啟動和運營容器。”
docker run --name mysql5.7.25 -v /Users/dee909/dev/docker/mysql:/var/lib/mysql -v /Users/dee909/dev/docker/tmp:/tmp -e MYSQL_ROOT_PASSWORD=password -d -p 3307:3306 mysql:5.7.25
docker run --name wordpress4.9.1 -v /Users/dee909/dev/docker/html:/var/www/html -v /Users/dee909/dev/docker/tmp:/tmp --link mysql5.7.25:mysql -d -p 80:80 wordpress:4.9.1