无法在 Nextcloud Docker 容器中挂载配置目录
Cannot mount Config directory in Nextcloud Docker container
我正在尝试在本地创建自定义 Nextcloud 配置,然后能够使用此处定义的卷将其安装到适当的文件夹:https://github.com/nextcloud/docker#persistent-data。对于 config 挂载,所有卷挂载工作 除了 ......为什么在这里被区别对待?
重现步骤
0) 输入 new/emptry 目录(不包含子目录或附加文件)。
1) 创建一个仅包含以下内容的 docker-compose.yml 文件:
version: "3.4"
services:
nextcloud:
image: nextcloud:latest
volumes:
- "./nextcloud/custom_apps:/var/www/html/custom_apps"
- "./nextcloud/config:/var/www/html/config"
- "/data/nextcloud:/var/www/html/data"
- "./themes:/var/www/html/themes"
2) docker-组合-d
预期行为
工作。我应该能够在 ./nextcloud/config 本地看到 /var/www/html/config 内容,然后插入一个客户 config.php,然后在容器中更新它。
实际行为
启动容器时出错,特定于 config 目录。如果我删除上面的 ./nextcloud/config:/var/www/html/config
卷挂载,那么容器将正常启动。
错误信息
ERROR: for nextcloud Cannot start service nextcloud: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \"/home/user/Nextcloud-test/nextcloud/config\" to rootfs \"/var/lib/docker/overlay2/41b567141e23b16cf5e4f99f4c33703fc9a533aa5a4bef68fbba70a74842ca88/merged\" at \"/var/lib/docker/overlay2/41b567141e23b16cf5e4f99f4c33703fc9a533aa5a4bef68fbba70a74842ca88/merged/var/www/html/config\" caused \"not a directory\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
ERROR: Encountered errors while bringing up the project.
服务器配置
操作系统:
操作系统:Debian GNU/Linux 10 (buster)
内核:Linux 4.19.0-8-cloud-amd64
架构:x86-64
图片
nextcloud:最新 (apache)
我无法使用您的步骤重现 (Ubuntu 18.04)。
从这里开始,运行 docker-compose up -d
然后 docker-compose logs
,我没有发现任何错误。然后,当 运行 docker inspect
在容器上时,我看到以下内容:
...
"Volumes": {
"/var/www/html": {},
"/var/www/html/config": {},
"/var/www/html/custom_apps": {},
"/var/www/html/data": {},
"/var/www/html/themes": {}
},
...
这表明挂载没有问题。
我建议你做什么:
- 检查目录
./nextcloud/config
是否存在且不是文件
- 检查您的 Docker 和 Docker Compose 安装是否是最新的
- 尝试 运行 带有
docker run -it -v ./nextcloud/config:/var/www/html/config <containername> /bin/bash
的 Docker 容器来探索挂载是否手动工作
- 尝试在最小示例(例如 Getting started 示例
上执行相同的操作
我正在尝试在本地创建自定义 Nextcloud 配置,然后能够使用此处定义的卷将其安装到适当的文件夹:https://github.com/nextcloud/docker#persistent-data。对于 config 挂载,所有卷挂载工作 除了 ......为什么在这里被区别对待?
重现步骤
0) 输入 new/emptry 目录(不包含子目录或附加文件)。
1) 创建一个仅包含以下内容的 docker-compose.yml 文件:
version: "3.4"
services:
nextcloud:
image: nextcloud:latest
volumes:
- "./nextcloud/custom_apps:/var/www/html/custom_apps"
- "./nextcloud/config:/var/www/html/config"
- "/data/nextcloud:/var/www/html/data"
- "./themes:/var/www/html/themes"
2) docker-组合-d
预期行为
工作。我应该能够在 ./nextcloud/config 本地看到 /var/www/html/config 内容,然后插入一个客户 config.php,然后在容器中更新它。
实际行为
启动容器时出错,特定于 config 目录。如果我删除上面的 ./nextcloud/config:/var/www/html/config
卷挂载,那么容器将正常启动。
错误信息
ERROR: for nextcloud Cannot start service nextcloud: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \"/home/user/Nextcloud-test/nextcloud/config\" to rootfs \"/var/lib/docker/overlay2/41b567141e23b16cf5e4f99f4c33703fc9a533aa5a4bef68fbba70a74842ca88/merged\" at \"/var/lib/docker/overlay2/41b567141e23b16cf5e4f99f4c33703fc9a533aa5a4bef68fbba70a74842ca88/merged/var/www/html/config\" caused \"not a directory\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type ERROR: Encountered errors while bringing up the project.
服务器配置
操作系统:
操作系统:Debian GNU/Linux 10 (buster) 内核:Linux 4.19.0-8-cloud-amd64 架构:x86-64
图片
nextcloud:最新 (apache)
我无法使用您的步骤重现 (Ubuntu 18.04)。
从这里开始,运行 docker-compose up -d
然后 docker-compose logs
,我没有发现任何错误。然后,当 运行 docker inspect
在容器上时,我看到以下内容:
...
"Volumes": {
"/var/www/html": {},
"/var/www/html/config": {},
"/var/www/html/custom_apps": {},
"/var/www/html/data": {},
"/var/www/html/themes": {}
},
...
这表明挂载没有问题。
我建议你做什么:
- 检查目录
./nextcloud/config
是否存在且不是文件 - 检查您的 Docker 和 Docker Compose 安装是否是最新的
- 尝试 运行 带有
docker run -it -v ./nextcloud/config:/var/www/html/config <containername> /bin/bash
的 Docker 容器来探索挂载是否手动工作 - 尝试在最小示例(例如 Getting started 示例 上执行相同的操作