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'] = '';
$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);
if(!in_array($firstChar, $forbiddenChars)) {
if (!in_array($firstChar, $forbiddenChars)) {
$this->guzzleClient->request(
'POST',
$url,
[
'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 {
$volumes = [];
foreach($container->GetVolumes()->GetVolumes() as $volume) {
if ($this->configurationManager->isWindowsPath($volume->name)) {
$volume->name = $this->configurationManager->GetWindowsVolumeName($volume->name);
}
$volumeEntry = $volume->name . ':' . $volume->mountPoint;
if($volume->isWritable) {
if ($volume->isWritable) {
$volumeEntry = $volumeEntry . ':' . 'rw';
} else {
$volumeEntry = $volumeEntry . ':' . 'ro';

View file

@ -94,8 +94,6 @@ docker run -it ^
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>
### How to resolve firewall problems with Fedora Linux, RHEL OS, CentOS, SUSE Linux and others?