首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nextcloud with Docker:无法创建或写入数据目录

Nextcloud with Docker:无法创建或写入数据目录
EN

Stack Overflow用户
提问于 2018-07-05 09:53:16
回答 2查看 9.9K关注 0票数 5

我使用Docker和Docker成功地安装了Nextcloud 13.0。

下面是Nextcloud的码头映像的GitHub回购:https://github.com/nextcloud/docker

默认情况下,我的Nextcloud安装将数据存储到以下路径:

代码语言:javascript
复制
/var/lib/docker/volumes/nextcloud_nextcloud/_data/data/user/files

我的/var文件夹位于一个小分区上,而/home文件夹大约有2Tb的存储空间。我正在尝试设置Nextcloud,以便将上传的文件存储到主机上的/home/iamdocker/nextcloud/data中,但它不起作用。

Nextcloud配置页面显示以下消息:

误差 无法创建或写入数据目录/home/iamdocker/nextcloud/ data /

我的Nextcloud安装(在Docker容器中运行)没有写的权限。

.env

代码语言:javascript
复制
MYSQL_ROOT_PASSWORD=***********************
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
MYSQL_PASSWORD=************************************
MYSQL_HOST=db

NEXTCLOUD_VERSION=13.0
NEXTCLOUD_ADMIN_USER=example
NEXTCLOUD_ADMIN_PASSWORD=********************************
NEXTCLOUD_TABLE_PREFIX=nc_
NEXTCLOUD_DATA_DIR=/home/iamdocker/nextcloud/data/

docker-compose.yml

代码语言:javascript
复制
version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    env_file:
      - .env
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}

  app:
    image: nextcloud:${NEXTCLOUD_VERSION}
    env_file:
      - .env
    ports:
      - 8081:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
      - ./data:/var/www/html/data
    environment:
      - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
      - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
      - NEXTCLOUD_TABLE_PREFIX=${NEXTCLOUD_TABLE_PREFIX}
      - NEXTCLOUD_DATA_DIR=${NEXTCLOUD_DATA_DIR}
    restart: always

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-06 06:43:53

我发现了问题所在:NEXTCLOUD_DATA_DIR中的错误路径。

环境变量NEXTCLOUD_DATA_DIR接受容器中Nextcloud的数据目录的路径,而不是主机上挂载卷的路径。

解决方案:我在/home/iamdocker/nextcloud/data/文件中用/var/www/html/data替换了.env

.env

代码语言:javascript
复制
MYSQL_ROOT_PASSWORD=***********************
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
MYSQL_PASSWORD=************************************
MYSQL_HOST=db

NEXTCLOUD_VERSION=13.0
NEXTCLOUD_ADMIN_USER=example
NEXTCLOUD_ADMIN_PASSWORD=********************************
NEXTCLOUD_TABLE_PREFIX=nc_
NEXTCLOUD_DATA_DIR=/var/www/html/data
票数 5
EN

Stack Overflow用户

发布于 2021-08-20 00:59:17

此解决方案消除了使用自定义数据位置的可能性,发生此错误是因为自定义数据目录不属于运行web服务器或PHP的用户;在Debian环境中,Apache的所有者用户必须是www-data,而在CentOS环境中,它应该是apache,赋予容器内或主机镜像目录正确的权限,自定义数据的位置应该可以很好地工作。

我总是建议从web服务器公共目录中删除数据目录。

代码语言:javascript
复制
chown -R www-data:www-data /dir

代码语言:javascript
复制
chown -R apache:apache /dir

CentOS + SELinux

要实现SELinux兼容性,请在卷尾使用:z

代码语言:javascript
复制
services:
  app:
    volumes:
      - nextcloud:/var/www/html:z
      - ./data:/var/www/html/data:z

我的问题和解决办法

我遇到了同样的权限问题,但是在我的例子中,我确实需要更改默认的文件位置。但是我不想有两个文件(Dockerfile和docker-come.yml),为了便于复制,我只想保留一个。

在docker-compose.yml中,我添加了以下语句的命令

代码语言:javascript
复制
services:
  app:
    command: >
      bash -c 'chown www-data:www-data /nextcloud-dados
      && /entrypoint.sh apache2-foreground'

我所做的是在容器启动时对自定义文件目录给予权限。

解释:

  • bash -c让bash运行某个命令,我不得不使用它,因为我为它们使用了多个命令和参数;
  • chown www-data:www-data /nextcloud-dados,此命令将修复权限问题。("dados“是巴西葡萄牙语的数据);
  • /entrypoint.sh apache2-foreground是实际执行并保持容器运行的命令,这是我从Docker获得的信息,其中显示在映像中执行的每个命令。(第44和45行)

您还可以通过/entrypoint.sh apache2-foreground列中的docker ps --no-trunc命令找到此命令( command )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51188290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档