设置:在过去的一周里,我一直在尝试使用 VirtualBox 和 Vagrant 在我的 2015 年旧 Macbook Pro 上的 Ubuntu Server VM 上设置 Nextcloud Docker 实例。虽然 VM 仅具有有限的 Nextcloud 容器存储空间,但负责文件存储的 Docker 卷位于 VirtualBox 提供的共享文件夹中,该文件夹位于安装到 MBP 的 2TB APFS Seagate 驱动器上,该过程在Vagrant文件如下,
# /vagrant/Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = 'ubuntu/focal64'
config.vm.hostname = 'ubuntu-server'
config.vm.network # some network configs
config.vm.synced_folder '/Volumes/SEAGATE/data/nextcloud', '/media/nextcloud'
config.vm.provision "shell", path: "setup.sh"
end
在setup.sh
如下中,
# /vagrant/setup.sh
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get -y install docker docker.io docker-compose
sudo docker-compose -f /vagrant/docker-compose.yml up -d
docker-compose.yml
并在如下的几乎样板中,
# /vagrant/docker-compose.yml
version: '3'
services:
nextcloud_db:
image: mariadb:10.5
container_name: nextcloud_db
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- /media/nextcloud/var/lib/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
nextcloud:
image: nextcloud
container_name: nextcloud_server
restart: always
ports:
- 8080:80
links:
- nextcloud_db
volumes:
- /media/nextcloud/var/www/html:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
volumes:
nextcloud:
nextcloud_db:
笔记:当 Vagrant 实例完成时,我通常会重新启动实例以重新加载 Nextcloud 服务器文件的所有权和组。这是因为这些服务器文件将被分配到root
, 而它们应该分配到www-data
或systemd-coredump
。这种不正确的分配会导致某些目录和文件(例如/var/www/html/data
和 )config.php
不可写。
然而,我遇到了一个问题任何尽管分配了无限存储空间,因此帐户至少应具有 1TB 存储空间,但其存储空间仅限于 Vagrant 实例的大小,通常小于 50GB。这是因为虽然帐户数据正确位于/var/www/html/data
Vagrant 实例中,但它是不是位于 Macbook 主机/Volumes/SEAGATE/data/nextcloud/var/www/html/data
应有的位置。尽管事实上在设置时,Nextcloud 卷在 Seagate 硬盘上完全同步,这意味着在设置后的某个时刻文件同步会失败。
为了重现这个:使用 创建实例vagrant up
,重启实例,进入Nextcloud启动页面,创建Nextcloud root用户。 root 用户的数据只能在来宾虚拟机中看到,而不能在主机中看到。
因素:此问题在 Windows 和 MacOS 操作系统上都会出现,无论共享文件夹是外部挂载还是本地目录,都会出现此问题。例如,切换/Volumes/SEAGATE/data/nextcloud
到某个本地目录./local/nextcloud
将得到相同的结果。此外,切换到 Docker 绑定安装不会改变结果。
我试过了移动 Docker 数据目录,以及寻找一般移动 Docker 卷的方法。之前还有一些似乎相关的问题:外部存储 - 无法识别文件夹和文件
这并不是说我没有解决方案:如果虚拟机被关闭,显然不会有问题,因为内部同步没问题。所以我的核现在的选择是在 Macbook 上双启动 Ubuntu 并在本地安装 Docker,以消除这些恶作剧。但这是我最后的手段。我更感兴趣的是为什么正在发生此问题,因为我以前从未遇到过文件夹不同步的问题。