Docker WordPress容器在~30秒后退出
我是使用Docker的新手,目前正尝试使用Wordpress Docker容器和MySQL数据库在本地创build一个Wordpress网站(注:我也是MySQL的新手)。 MySQL数据库没有运行在容器中,但我宁愿在我的机器上创build自己的本地数据库。
当我尝试使用此命令创build一个Wordpress容器时:
sudo docker run --name wordpress_local -e WORDPRESS_DB_HOST=localhost -e WORDPRESS_DB_USER=test -e WORDPRESS_DB_PASSWORD=password -d wordpress
容器运行27秒,然后退出。
我不知道这是否因为它不能连接到我的数据库,但是,当我创build链接到MySQL 容器的 WordPress容器,我没有这个问题。 设置我的数据库的步骤:
- 在我的机器上安装了MySQL服务器和客户端
- 创build一个名为test @ localhost的用户并给它一个密码
- 授予此用户所有的WordPress权限
任何帮助,将不胜感激!
编辑:
容器的日志如下所示:
Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10 MySQL Connection Error: (2002) No such file or directory Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in - on line 10
编辑2:
运行sudo docker events --filter wordpress_local
产生:
2015-06-10T13:57:11.000000000Z e9000a3a085731d527f0e64a26f681126f5885f9ef0d4a845361d581ae2d111a: (from wordpress:latest) die
我find了解决办法。 Docker提供了两种联网模式:桥接和主机。
桥接networking模式是默认的,当使用这种模式时,MySQL必须监听Docker主机IP地址( 172.17.42.1
)上的连接。 换句话说,MySQLconfiguration文件中的bind-address
必须设置为: 172.17.42.1
我的解决scheme是通过添加--net="host"
标志到我的命令使用主机networking模式。 这允许我从我的容器连接到本地主机,并允许我保持127.0.0.1
作为我的MySQL绑定地址。 正确的命令如下所示。
sudo docker run --name wordpress_local --net="host" -e WORDPRESS_DB_HOST=127.0.0.1 -e WORDPRESS_DB_USER=test -e WORDPRESS_DB_PASSWORD=password -d wordpress
编辑:这是很好的要注意,这不是一个非常安全的方法,因为它允许容器访问本地networking服务。 更好的方法是妥协数据库的灵活性,并将其绑定到Docker主机,或允许数据库接受来自所有服务的连接,并使用防火墙过滤不需要的访问。