fix host mounts for windows

Signed-off-by: szaimen <szaimen@e.mail.de>
This commit is contained in:
szaimen 2022-05-21 21:33:07 +02:00
parent b4a8322a1a
commit 3c6cb85c74
3 changed files with 43 additions and 5 deletions

View file

@ -512,4 +512,24 @@ class ConfigurationManager
$config['timezone'] = ''; $config['timezone'] = '';
$this->WriteConfig($config); $this->WriteConfig($config);
} }
public function isWindowsPath(string $path) : bool {
$windowsPath = '/host_mnt/';
if (str_starts_with($path, $windowsPath)) {
return true;
}
return false;
}
public function GetWindowsVolumeName(string $volumeName) : string {
$name = '';
if ($volumeName === $this->GetNextcloudDatadirMount()) {
$name = 'nextcloud_aio_nextcloud_data';
} elseif ($volumeName === $this->GetNextcloudMount()) {
$name = 'nextcloud_aio_nextcloud_mount';
} elseif ($volumeName === $this->GetBorgBackupHostLocation()) {
$name = 'nextcloud_aio_backup';
}
return $name;
}
} }

View file

@ -186,13 +186,30 @@ class DockerActionManager
]; ];
$firstChar = substr($volume->name, 0, 1); $firstChar = substr($volume->name, 0, 1);
if(!in_array($firstChar, $forbiddenChars)) { if (!in_array($firstChar, $forbiddenChars)) {
$this->guzzleClient->request( $this->guzzleClient->request(
'POST', 'POST',
$url, $url,
[ [
'json' => [ 'json' => [
'name' => $volume->name, 'Name' => $volume->name,
],
]
);
} elseif ($this->configurationManager->isWindowsPath($volume->name)) {
$name = $this->configurationManager->GetWindowsVolumeName($volume->name);
$this->guzzleClient->request(
'POST',
$url,
[
'json' => [
'Name' => $name,
'Driver' => 'local',
'DriverOpts' => [
'type' => 'none',
'device' => $volume->name,
'o' => 'bind',
]
], ],
] ]
); );
@ -203,8 +220,11 @@ class DockerActionManager
public function CreateContainer(Container $container) : void { public function CreateContainer(Container $container) : void {
$volumes = []; $volumes = [];
foreach($container->GetVolumes()->GetVolumes() as $volume) { foreach($container->GetVolumes()->GetVolumes() as $volume) {
if ($this->configurationManager->isWindowsPath($volume->name)) {
$volume->name = $this->configurationManager->GetWindowsVolumeName($volume->name);
}
$volumeEntry = $volume->name . ':' . $volume->mountPoint; $volumeEntry = $volume->name . ':' . $volume->mountPoint;
if($volume->isWritable) { if ($volume->isWritable) {
$volumeEntry = $volumeEntry . ':' . 'rw'; $volumeEntry = $volumeEntry . ':' . 'rw';
} else { } else {
$volumeEntry = $volumeEntry . ':' . 'ro'; $volumeEntry = $volumeEntry . ':' . 'ro';

View file

@ -94,8 +94,6 @@ docker run -it ^
nextcloud/all-in-one:latest nextcloud/all-in-one:latest
``` ```
**Please note:** AIO works on Windows in general but due to a bug in `Docker for Windows`, it currently does not support mounting directories from the host into AIO which means that `NEXTCLOUD_DATADIR`, `NEXTCLOUD_MOUNT` do not work and the built-in backup solution is not able to write to the host OS. See https://github.com/nextcloud/all-in-one/discussions/600.
</details> </details>
### How to resolve firewall problems with Fedora Linux, RHEL OS, CentOS, SUSE Linux and others? ### How to resolve firewall problems with Fedora Linux, RHEL OS, CentOS, SUSE Linux and others?