From 0c5950f215fc82e3b1a5826f9fce39c4baca561c Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Tue, 1 Sep 2015 14:22:28 +0200 Subject: [PATCH 1/4] Add exec inspect --- src/Docker/Manager/ContainerManager.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Docker/Manager/ContainerManager.php b/src/Docker/Manager/ContainerManager.php index 3b145c66..1214d37c 100644 --- a/src/Docker/Manager/ContainerManager.php +++ b/src/Docker/Manager/ContainerManager.php @@ -284,6 +284,28 @@ public function execstart($execid, callable $callback = null, $detach = false, $ return $response; } + /** + * Get details about an executive + * + * @param string $execid Identifier from exec() + * + * @throws \Docker\Exception\UnexpectedStatusCodeException + * + * @return stdClass + */ + public function execinspect($execid) + { + $response = $this->client->get(['/exec/{id}/json', [ + 'id' => $execid + ]]); + + if ($response->getStatusCode() !== "200") { + throw UnexpectedStatusCodeException::fromResponse($response); + } + + return json_decode((string) $response->getBody()); + } + /** * Attach a container to a callback to read logs * From 0a0a8587aea9a562396a0383e9c051cc4676616b Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Wed, 2 Sep 2015 13:00:00 +0200 Subject: [PATCH 2/4] Test execinspect() --- src/Docker/Tests/Manager/ContainerManagerTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Docker/Tests/Manager/ContainerManagerTest.php b/src/Docker/Tests/Manager/ContainerManagerTest.php index 69cd4282..4606c8d1 100644 --- a/src/Docker/Tests/Manager/ContainerManagerTest.php +++ b/src/Docker/Tests/Manager/ContainerManagerTest.php @@ -529,10 +529,13 @@ public function testExec() }); $response->getBody()->getContents(); + $inspection = $manager->execinspect($execId); $manager->kill($container); $this->assertEquals(1, $type); $this->assertEquals('output', $output); + $this->assertEquals(0, $inspection->ExitCode); + $this->assertEquals(false, $inspection->Running); } public function testRename() From bba3a1e89c80db49e4630464495425f770313095 Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Wed, 2 Sep 2015 13:09:38 +0200 Subject: [PATCH 3/4] Add docs for process inspection --- docs/container.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/container.md b/docs/container.md index a83103cd..cbd074d7 100644 --- a/docs/container.md +++ b/docs/container.md @@ -253,3 +253,16 @@ $response = $manager->execstart($execid, function ($log, $type) use($logger) { //Response stream is never read you need to simulate a wait in order to get output $response->getBody()->getContents(); ``` + +### Inspect a process + +You can get various details about an exec instance and its current state: + +``` +$execid = $manager->exec($container, ["/bin/bash", "-c", "ls /var/www/html"]); +$inspection = $manager->execinspect($execid); + +echo $inspection->Running; +echo $inspection->ExitCode; +// there's a lot more +``` From 4bd64f4dcf2420674a618d2d5214549174fae082 Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Thu, 3 Sep 2015 15:17:41 +0200 Subject: [PATCH 4/4] Separate inspection test --- .../Tests/Manager/ContainerManagerTest.php | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Docker/Tests/Manager/ContainerManagerTest.php b/src/Docker/Tests/Manager/ContainerManagerTest.php index 4606c8d1..de76fdd5 100644 --- a/src/Docker/Tests/Manager/ContainerManagerTest.php +++ b/src/Docker/Tests/Manager/ContainerManagerTest.php @@ -529,11 +529,29 @@ public function testExec() }); $response->getBody()->getContents(); - $inspection = $manager->execinspect($execId); $manager->kill($container); $this->assertEquals(1, $type); $this->assertEquals('output', $output); + } + + public function testExecInspect() + { + $manager = $this->getManager(); + $dockerFileBuilder = new ContextBuilder(); + $dockerFileBuilder->from('ubuntu:precise'); + $dockerFileBuilder->add('/daemon.sh', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'script' . DIRECTORY_SEPARATOR . 'daemon.sh')); + $dockerFileBuilder->run('chmod +x /daemon.sh'); + + $this->getDocker()->build($dockerFileBuilder->getContext(), 'docker-php-restart-test', null, true, false, true); + + $container = new Container(['Image' => 'docker-php-restart-test', 'Cmd' => ['/daemon.sh']]); + $manager->create($container); + $manager->start($container); + + $execId = $manager->exec($container, ['/bin/bash', '-c', 'echo -n "output"']); + $inspection = $manager->execinspect($execId); + $this->assertEquals(0, $inspection->ExitCode); $this->assertEquals(false, $inspection->Running); }