我的 Docker Wordpress 网站在哪里存储数据?

Posted

技术标签:

【中文标题】我的 Docker Wordpress 网站在哪里存储数据?【英文标题】:Where is my Docker Wordpress Website Storing Data? 【发布时间】:2015-08-27 06:58:48 【问题描述】:

我目前在 Docker 中设置了一个 Wordpress 容器,并将其链接到同一台机器上的 mysql 数据库(即不是在 Docker 容器中)。我尝试在浏览器中编辑网站,删除 Wordpress 容器,并创建一个链接到同一数据库的新容器。

当我这样做时,我在我的网站上发布的示例帖子仍然存在,因此我假设我的数据正在本地存储在我的数据库中。但是,我随后尝试使用一个 Wordpress 容器使用 Wordpress Multisite 设置多个网站。为此,我必须在 Wordpress 容器中编辑 Wordpress 配置文件。

我删除了这个容器,并像以前一样创建了一个新容器。我尝试复制此容器中的配置更改,但是,当我导航到我的网站时,它只会给我一个白屏。这让我觉得 MySQL 数据库突然指向了空表。

我的 Wordpress 模板/信息实际存储在哪里?

编辑:下面是我运行的命令

sudo docker run -p 80:80 --name wordpress_local -e WORDPRESS_DB_HOST=(machine's IP address) -e WORDPRESS_DB_USER=user -e WORDPRESS_DB_PASSWORD=password -d wordpress

注意:这是假设我有一个本地 MySQL 数据库设置,它接受来自 0.0.0.0 的连接,并且有一个名为 user 的用户,密码为 password

我知道我的容器通过查看日志正确链接到数据库(以及我可以访问该网站的事实 - 只是得到一个空白页面)

编辑 2:查看我的 Wordpress 容器文件系统,我可以浏览不同的文件夹并查看我已安装的主题/插件等内容。为什么这没有存储在我的本地机器上? (对不起,如果这是一个愚蠢的问题——我对 MySQL 和 Docker 都是新手)

【问题讨论】:

你能展示你的 Dockerfile 或复制器吗? 我没有 Dockerfile,而是只运行一个命令来让我的容器运行。我对 MySQL 数据库所做的唯一事情是:确保它正在运行,并确保它有一个对我创建的 wordpress 数据库具有权限的用户 你可以随时进入Wordpress容器docker exec -it container_id bash并使用lsof之类的工具查看它的存储位置 是 registry.hub.docker.com/_/wordpress 你的 docker 镜像吗? @Thomasleveil 是的,我相信这就是我正在使用的图像 【参考方案1】:

第一次运行 wordpress 容器时,初始化脚本会将 wordpress 代码库下载到/var/www/html,然后启动 Web 服务器。由于容器内的所有内容都是短暂的,因此当您重新运行容器时,您所做的任何更改都会丢失代码库(除非您只是停止/启动容器,这不是这种情况下的最佳选择)

您需要使该文件夹具有持久数据。为此,您必须从容器内的主机安装一个文件夹:

sudo docker run -p 80:80 \
   --name wordpress_local \
  -e WORDPRESS_DB_HOST=(machine's IP address) \
  -e WORDPRESS_DB_USER=user \
  -e WORDPRESS_DB_PASSWORD=password \
  -d \
  -v `pwd`/html:/var/www/html \
  wordpress

别忘了,文件夹应该已经创建好了:mkdir -p data

【讨论】:

我明白了。但是,我仍然不明白我的 MySQL 数据库有什么用途。我的数据库不应该将数据存储在某个本地目录中吗?如果我使用这种方法将文件夹挂载到我的机器上,为什么我什至需要数据库? 另外,当您提到“重新运行容器”时,您是指将容器提交到图像然后运行图像吗?我会这样做的唯一情况是,如果我决定将图像推送到存储库并希望在不同的机器上运行网站。在这种情况下,我是否还需要复制机器上已挂载文件夹中的文件? MySQL 需要一个本地目录来存储数据(在 ubuntu/debian 中它被放置在 /var/lib/mysql 中),而 wordpress 容器需要一个不同的目录来保存代码运行、上传等。我的answers 解决wordpress容器的数据持久化问题。 至于“重新运行容器”,当你run容器from一个镜像,你创建添加一个读写文件层在图像顶部。当你杀死/删除容器时,这个文件层会丢失,所以当你再次运行容器时,会创建一个新的文件层,而不会丢失丢失的数据。要使此文件层持续存在,您需要使用我的回答中描述的解决方案。获取有关容器状态的更多信息here 您已经回答了我的问题,但如果我还可以问:如果文件系统将丢失,那么将容器提交到映像有什么意义?还是我误会了什么?

以上是关于我的 Docker Wordpress 网站在哪里存储数据?的主要内容,如果未能解决你的问题,请参考以下文章

将 WordPress 站点移至 Docker,并最终移至服务器

Docker快速搭建WordPress博客网站

wordpress网站上的SMS Api集成

WordPress 网站中的 SMS Api 集成

基于docker搭建wordpress博客网站平台

在 docker-compose、nginx、mysql 和 php 上运行 wordpress