allow to add container to host network

Signed-off-by: Simon L <szaimen@e.mail.de>
This commit is contained in:
Simon L 2022-12-25 03:10:20 +01:00
parent 117c3de7c5
commit cea32f50af

View file

@ -124,8 +124,9 @@ class DockerActionManager
} }
$containerName = $container->GetIdentifier(); $containerName = $container->GetIdentifier();
if ($container->GetInternalPort() !== "") { $internalPort = $container->GetInternalPort();
$connection = @fsockopen($containerName, (int)$container->GetInternalPort(), $errno, $errstr, 0.1); if ($internalPort !== "" && $internalPort !== 'host') {
$connection = @fsockopen($containerName, (int)$internalPort, $errno, $errstr, 0.1);
if ($connection) { if ($connection) {
fclose($connection); fclose($connection);
return new RunningState(); return new RunningState();
@ -216,8 +217,10 @@ class DockerActionManager
} }
$exposedPorts = []; $exposedPorts = [];
foreach($container->GetPorts()->GetPorts() as $port) { if ($container->GetInternalPort() !== 'host') {
$exposedPorts[$port] = null; foreach($container->GetPorts()->GetPorts() as $port) {
$exposedPorts[$port] = null;
}
} }
$requestBody = [ $requestBody = [
@ -566,7 +569,6 @@ class DockerActionManager
true true
); );
// get the id from the response
$id = $response['Id']; $id = $response['Id'];
// start the exec // start the exec
@ -606,34 +608,39 @@ class DockerActionManager
} }
} }
private function ConnectContainerIdToNetwork(string $id) : void private function ConnectContainerIdToNetwork(string $id, string $internalPort) : void
{ {
$url = $this->BuildApiUrl('networks/create'); if ($internalPort === 'host') {
try { $network = 'host';
$this->guzzleClient->request( } else {
'POST', $network = 'nextcloud-aio';
$url, $url = $this->BuildApiUrl('networks/create');
[ try {
'json' => [ $this->guzzleClient->request(
'Name' => 'nextcloud-aio', 'POST',
'CheckDuplicate' => true, $url,
'Driver' => 'bridge', [
'Internal' => false, 'json' => [
'Options' => [ 'Name' => 'nextcloud-aio',
'com.docker.network.bridge.enable_icc' => 'true' 'CheckDuplicate' => true,
'Driver' => 'bridge',
'Internal' => false,
'Options' => [
'com.docker.network.bridge.enable_icc' => 'true'
]
] ]
] ]
] );
); } catch (RequestException $e) {
} catch (RequestException $e) { // 409 is undocumented and gets thrown if the network already exists.
// 409 is undocumented and gets thrown if the network already exists. if ($e->getCode() !== 409) {
if ($e->getCode() !== 409) { throw $e;
throw $e; }
} }
} }
$url = $this->BuildApiUrl( $url = $this->BuildApiUrl(
sprintf('networks/%s/connect', 'nextcloud-aio') sprintf('networks/%s/connect', $network)
); );
try { try {
$this->guzzleClient->request( $this->guzzleClient->request(
@ -655,12 +662,12 @@ class DockerActionManager
public function ConnectMasterContainerToNetwork() : void public function ConnectMasterContainerToNetwork() : void
{ {
$this->ConnectContainerIdToNetwork('nextcloud-aio-mastercontainer'); $this->ConnectContainerIdToNetwork('nextcloud-aio-mastercontainer', '');
} }
public function ConnectContainerToNetwork(Container $container) : void public function ConnectContainerToNetwork(Container $container) : void
{ {
$this->ConnectContainerIdToNetwork($container->GetIdentifier()); $this->ConnectContainerIdToNetwork($container->GetIdentifier(), $container->GetInternalPort());
} }
public function StopContainer(Container $container) : void { public function StopContainer(Container $container) : void {