共享同一父代的Docker卷?

时间:2019-02-05 03:50:57

标签: wordpress docker docker-compose

我正在尝试构建基于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数据和w内容创建成功 但是嵌套的主题和插件无法使用

我还缺少什么?

致谢

1 个答案:

答案 0 :(得分:1)

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

同时,您要声明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:部分,以免引起混淆。