Nextcloud Docker 容器不将数据同步到 VirtualBox 主机

Nextcloud Docker 容器不将数据同步到 VirtualBox 主机

设置:在过去的一周里,我一直在尝试使用 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-datasystemd-coredump。这种不正确的分配会导致某些目录和文件(例如/var/www/html/data和 )config.php不可写。

然而,我遇到了一个问题任何尽管分配了无限存储空间,因此帐户至少应具有 1TB 存储空间,但其存储空间仅限于 Vagrant 实例的大小,通常小于 50GB。这是因为虽然帐户数据正确位于/var/www/html/dataVagrant 实例中,但它是不是位于 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,以消除这些恶作剧。但这是我最后的手段。我更感兴趣的是为什么正在发生此问题,因为我以前从未遇到过文件夹不同步的问题。

相关内容