Skip to content

Commit

Permalink
Merge pull request #1597 from nextcloud/enh/noid/allow-to-add-host-ne…
Browse files Browse the repository at this point in the history
…twork

allow to add container to host network
  • Loading branch information
szaimen authored Dec 30, 2022
2 parents 9c968d3 + cea32f5 commit e535abc
Showing 1 changed file with 35 additions and 28 deletions.
63 changes: 35 additions & 28 deletions php/src/Docker/DockerActionManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,9 @@ public function GetContainerStartingState(Container $container) : IContainerStat
}

$containerName = $container->GetIdentifier();
if ($container->GetInternalPort() !== "") {
$connection = @fsockopen($containerName, (int)$container->GetInternalPort(), $errno, $errstr, 0.1);
$internalPort = $container->GetInternalPort();
if ($internalPort !== "" && $internalPort !== 'host') {
$connection = @fsockopen($containerName, (int)$internalPort, $errno, $errstr, 0.1);
if ($connection) {
fclose($connection);
return new RunningState();
Expand Down Expand Up @@ -216,8 +217,10 @@ public function CreateContainer(Container $container) : void {
}

$exposedPorts = [];
foreach($container->GetPorts()->GetPorts() as $port) {
$exposedPorts[$port] = null;
if ($container->GetInternalPort() !== 'host') {
foreach($container->GetPorts()->GetPorts() as $port) {
$exposedPorts[$port] = null;
}
}

$requestBody = [
Expand Down Expand Up @@ -574,7 +577,6 @@ public function sendNotification(Container $container, string $subject, string $
true
);

// get the id from the response
$id = $response['Id'];

// start the exec
Expand Down Expand Up @@ -614,34 +616,39 @@ public function DisconnectContainerFromNetwork(Container $container) : void
}
}

private function ConnectContainerIdToNetwork(string $id) : void
private function ConnectContainerIdToNetwork(string $id, string $internalPort) : void
{
$url = $this->BuildApiUrl('networks/create');
try {
$this->guzzleClient->request(
'POST',
$url,
[
'json' => [
'Name' => 'nextcloud-aio',
'CheckDuplicate' => true,
'Driver' => 'bridge',
'Internal' => false,
'Options' => [
'com.docker.network.bridge.enable_icc' => 'true'
if ($internalPort === 'host') {
$network = 'host';
} else {
$network = 'nextcloud-aio';
$url = $this->BuildApiUrl('networks/create');
try {
$this->guzzleClient->request(
'POST',
$url,
[
'json' => [
'Name' => 'nextcloud-aio',
'CheckDuplicate' => true,
'Driver' => 'bridge',
'Internal' => false,
'Options' => [
'com.docker.network.bridge.enable_icc' => 'true'
]
]
]
]
);
} catch (RequestException $e) {
// 409 is undocumented and gets thrown if the network already exists.
if ($e->getCode() !== 409) {
throw $e;
);
} catch (RequestException $e) {
// 409 is undocumented and gets thrown if the network already exists.
if ($e->getCode() !== 409) {
throw $e;
}
}
}

$url = $this->BuildApiUrl(
sprintf('networks/%s/connect', 'nextcloud-aio')
sprintf('networks/%s/connect', $network)
);
try {
$this->guzzleClient->request(
Expand All @@ -663,12 +670,12 @@ private function ConnectContainerIdToNetwork(string $id) : void

public function ConnectMasterContainerToNetwork() : void
{
$this->ConnectContainerIdToNetwork('nextcloud-aio-mastercontainer');
$this->ConnectContainerIdToNetwork('nextcloud-aio-mastercontainer', '');
}

public function ConnectContainerToNetwork(Container $container) : void
{
$this->ConnectContainerIdToNetwork($container->GetIdentifier());
$this->ConnectContainerIdToNetwork($container->GetIdentifier(), $container->GetInternalPort());
}

public function StopContainer(Container $container) : void {
Expand Down

0 comments on commit e535abc

Please sign in to comment.