运行docker-compose后,Drupal 8文件夹为空

时间:2019-03-20 18:55:00

标签: docker drupal docker-compose drupal-8

我正在尝试为Drupal 8创建本地开发。这是我的docker-compose.yml文件的内容。

version: "3"

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - "./drupal/web:/var/www/html"
      - "./drupal/nginx.conf:/etc/nginx/conf.d/default.conf"
    depends_on:
      - php      
  php:
    image: drupal:8.6-fpm-alpine
    volumes:
      - "./drupal/web:/var/www/html"
    restart: always
    depends_on:
      - mysql
  mysql:
      image: mysql:8
      entrypoint: ['/entrypoint.sh', '--default-authentication-plugin=mysql_native_password']
      environment:
        MYSQL_ROOT_PASSWORD: "drupal"
        MYSQL_USER: "drupal"
        MYSQL_PASSWORD: "drupal"
        MYSQL_DATABASE: "drupal"
      volumes:
        - "./drupal/mysql:/var/lib/mysql"

如果我替换了drupal的卷,那么它将在drupal容器下创建drupal内容。但是,此后,我无法从主机访问drupal内容。

      - /var/www/html/modules
      - /var/www/html/profiles
      - /var/www/html/themes
      - /var/www/html/sites

运行 docker-compose up 之后。我支持在drupal / web文件夹下包含drupal的内容。但是它是空的。你知道发生了什么吗?谢谢,

1 个答案:

答案 0 :(得分:1)

关于卷定义,根据this,似乎您必须按照更新的问题中的描述声明它们。

  

普遍认为/ var / www / html / modules,/ var / www / html / profiles和/ var / www / html / themes通常是卷(可能具有明确的VOLUME声明)在以后对该图像的更新中),但是/ var / www / html / sites的处理有些复杂,因为该目录的内容确实需要使用图像中的内容进行初始化。

因此,您需要将每个路径分别定义为卷,无论是本地目录还是使用命名卷,例如:

docker run --name some-drupal --network some-network -d \
    -v /path/on/host/modules:/var/www/html/modules \
    -v /path/on/host/profiles:/var/www/html/profiles \
    -v /path/on/host/sites:/var/www/html/sites \
    -v /path/on/host/themes:/var/www/html/themes \
    drupal

关于权限问题,这是因为容器将所有者和组更改为here中的www-data,而容器使用的UID / GID可能与实际的主机用户不同。从drupal的Dockerfile:

RUN curl -fSL "https://ftp.drupal.org/files/projects/drupal-${DRUPAL_VERSION}.tar.gz" -o drupal.tar.gz \
    && echo "${DRUPAL_MD5} *drupal.tar.gz" | md5sum -c - \
    && tar -xz --strip-components=1 -f drupal.tar.gz \
    && rm drupal.tar.gz \
    && chown -R www-data:www-data sites modules themes

您可以做的是在主机上为drupal的文件设置ACL规则,如下所示,这样您就可以在开发时编辑和修改文件(假设您的用户名是 dale ):

sudo setfacl -Rm u:dale:rwx,d:u:dale:rwx /path/to/drupal/files

当然,如果您是从主机手动创建文件的,则需要授予该文件适当的权限,以便Web服务器可以通过执行以下命令来访问该文件(假设www-data uid为33,gid为33):

sudo chown 33:33 /path/to/drupla/files_or_directories/ -R