【问题标题】:Docker volumes that share the same parent?共享同一个父级的 Docker 卷?
【发布时间】:2019-02-05 03:50:57
【问题描述】:

我正在尝试构建一个基于 docker 的 WordPress 开发环境,我希望能够拥有这样的文件夹结构:

.
|
--wp-data
|
--wp-content
|
--plugins
|
--themes

插件和主题也在 wp-content 中

这是我的 docker-compose 文件:

version: '3.3'
services:
    db:
        image: mysql:5.7
        volumes:
            - ./wp-data:/var/lib/mysql
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: wordpress
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress

    wordpress:
        depends_on:
            - db
        image: wordpress:latest
        ports:
            - '8000:80'
        restart: always
        volumes:
            - ./wp-content:/var/www/html/wp-content/
            - ./themes:/var/www/html/wp-content/themes/
            - ./plugins:/var/www/html/wp-content/plugins/
        environment:
            WORDPRESS_DB_HOST: db:3306
            WORDPRESS_DB_USER: wordpress
            WORDPRESS_DB_PASSWORD: wordpress
            WORDPRESS_DB_NAME: wordpress
volumes:
    wp-data:
    wp-content:
    themes:
    plugins:

wp-data 和 w-content 创建成功 但是嵌套的主题和插件不是

我错过了什么?

问候

【问题讨论】:

  • 为主题和插件使用单独的卷背后的用例是什么,因为它们是 wp-content 文件夹中的内容?
  • 因为我只对控制主题和插件文件夹的版本控制感兴趣,而且我是 WordPress 开发生态系统的新手 :)

标签: wordpress docker docker-compose


【解决方案1】:

您在滥用卷。在您的 docker-compose.yml 中,您为每个服务创建 bind mounts - 这意味着您将主机的特定目录安装到容器中。

同时,您要声明一个volumes 部分,其中明确声明具有相同名称的卷,但从不使用它们并创建为空目录。

如果您想创建和使用volumes,您需要通过以下方式重写您的docker-compose.yml

services:
    ...
    db:
        ...
        volumes:
            - wp-data:/var/lib/mysql
        ...
    wordpress:
        volumes:
            - wp-content:/var/www/html/wp-content/
            - themes:/var/www/html/wp-content/themes/
            - plugins:/var/www/html/wp-content/plugins/
volumes:
    wp-data:
    wp-content:
    themes:
    plugins:

这将启用卷,但您仍然需要一种将数据从主机放入其中的方法(例如 docker cp)。

另一方面,你们中打算使用绑定挂载,您需要完全删除结尾 volumes: 部分以免混淆。

【讨论】:

  • 您能否向我解释一下容器卷和顶级卷之间的区别?我尝试在 docker compose docs 中找到该信息,但或者我没有找到或没有很好地解释。
  • 没有“容器卷”。卷可以是外部的(由docker volume create 显式创建),也可以隐式自动创建,但docker-compose。第二个选项非常适合只需要在容器中的服务之间交换数据的情况;而在会话之间持久化数据最好使用外部卷。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多