diff --git a/src/Container.php b/src/Container.php index c7f082a..dad156a 100644 --- a/src/Container.php +++ b/src/Container.php @@ -18,6 +18,7 @@ final class Container private string $apiToken = 'secret'; private ?SigningKey $signingKey = null; private ?StartedGenericContainer $container = null; + private ?string $tempSigningKeyFile = null; public function withImageTag(string $tag): self { @@ -57,26 +58,25 @@ public function start(): void '--http-enabled', '--https-enabled=false', ]; - $content = []; if ($this->signingKey instanceof SigningKey) { $command[] = '--signing-key-file'; $command[] = '/etc/esdb/signing-key.pem'; + } + + $container = (new GenericContainer("{$this->imageName}:{$this->imageTag}")) + ->withExposedPorts($this->internalPort) + ->withCommand($command); + + if ($this->signingKey instanceof SigningKey) { + $this->tempSigningKeyFile = getcwd() . '/.esdb_signing_key_' . uniqid(); + file_put_contents($this->tempSigningKeyFile, $this->signingKey->privateKeyPem); + chmod($this->tempSigningKeyFile, 0o644); - $content[] = [ - 'content' => $this->signingKey->privateKeyPem, - 'target' => '/etc/esdb/signing-key.pem', - 'mode' => 0o777, - ]; + $container = $container->withMount($this->tempSigningKeyFile, '/etc/esdb/signing-key.pem'); } - $container = - (new GenericContainer("{$this->imageName}:{$this->imageTag}")) - ->withExposedPorts($this->internalPort) - ->withCommand($command) - ->withCopyContentToContainer($content) - ->withWait((new WaitForHttp($this->internalPort, 20000))->withPath('/api/v1/ping')) - ; + $container = $container->withWait((new WaitForHttp($this->internalPort, 20000))->withPath('/api/v1/ping')); try { $this->container = $container->start(); @@ -139,6 +139,11 @@ public function stop(): void $this->container->stop(); $this->container = null; } + + if ($this->tempSigningKeyFile !== null && file_exists($this->tempSigningKeyFile)) { + unlink($this->tempSigningKeyFile); + $this->tempSigningKeyFile = null; + } } public function getClient(): Client