docker-php/docker-php-api
Unmaintained generated Docker Engine API PHP client (Jane OpenAPI). Not intended for direct use—use docker-php instead. Versioning follows Jane major + Docker API version (e.g., 4.1.25.*); pin versions to avoid breakage.
docker-php/docker, which depends on this generated API client.composer require docker-php/docker
This pulls the API client as a dependency automatically.use Docker\Docker;
$client = new Docker('unix:///var/run/docker.sock');
$containers = $client->listContainers();
print_r($containers);
Verify Docker daemon connectivity and API responses.src folder for raw OpenAPI-generated classes (e.g., Container, Image).Container Management:
// Pull an image
$client->pull('nginx:latest');
// Run a container
$container = $client->run('nginx:latest', ['detach' => true]);
// Inspect container
$inspect = $client->inspectContainer($container['Id']);
Image Operations:
// List images
$images = $client->listImages(['all' => true]);
// Build from Dockerfile
$client->buildImage('/path/to/Dockerfile', ['tag' => 'my-image']);
Networks/Volumes:
// Create a network
$network = $client->createNetwork(['Name' => 'my-net']);
// List volumes
$volumes = $client->listVolumes();
try {
$client->stopContainer($containerId);
} catch (\Docker\Exception $e) {
log::error("Docker error: " . $e->getMessage());
}
buildImage):
$client->buildImage($path, ['tag' => 'my-image'], function ($output) {
echo $output['stream'] ?? '';
});
$client = new Docker('tcp://192.168.99.100:2376', [
'ssl' => true,
'certPath' => '/path/to/certs'
]);
// app/Providers/DockerServiceProvider.php
public function register()
{
$this->app->singleton('docker', function () {
return new Docker(env('DOCKER_HOST', 'unix:///var/run/docker.sock'));
});
}
// app/Console/Commands/RebuildDocker.php
protected $docker;
public function __construct(Docker $docker) { $this->docker = $docker; }
public function handle()
{
$this->docker->buildImage('/path/to/Dockerfile', ['tag' => 'app']);
}
// app/Jobs/DeployContainer.php
public function handle(Docker $docker)
{
$docker->run('app-image', ['detach' => true, 'name' => 'app-container']);
}
Deprecation Warning:
docker-php/docker (which depends on this) instead.Versioning Quirks:
MAJOR.JANE_VERSION.DOCKER_API_VERSION.MINOR (e.g., 4.1.25.0).composer require docker-php/docker-php-api:4.1.25.*
SSL/TLS Issues:
tcp://, ensure certificates are properly configured:
$client = new Docker('tcp://host:2376', [
'ssl' => true,
'certPath' => '/path/to/certs',
'caPath' => '/path/to/ca.pem'
]);
$client->setDebug(true);
Rate Limiting:
use Docker\Exception\DockerException;
$attempts = 0;
do {
try { return $client->listContainers(); }
catch (DockerException $e) {
if (++$attempts >= 3) throw $e;
sleep(1);
}
} while (true);
Platform-Specific Paths:
unix:///var/run/docker.sockunix:///Users/$USER/.docker/run/docker.sockunix:///mnt/c/users/$USER/.docker/run/docker.sock$client->setDebug(true); // Logs raw API requests/responses
journalctl -u docker.service -f # Systemd
docker logs <container-id> # Container logs
var_dump() or print_r() to inspect raw responses:
$response = $client->inspectContainer($id);
var_dump($response->getStatusCode(), $response->getBody());
$client->get('/_ping', [], 'GET'); // Raw API call
$client->addMiddleware(function ($request) {
$request->setHeader('X-Custom-Header', 'value');
});
GuzzleHttp\HandlerStack to mock responses:
$handler = HandlerStack::create();
$handler->push(Middleware::tap(function ($request) {
return new Response(200, [], json_encode(['Id' => 'test-id']));
}));
$client->setHandler($handler);
$client once (e.g., as a singleton).listContainers() with filters instead of multiple inspectContainer() calls.logs), stream responses:
$client->getContainerLogs($id, [
'follow' => true,
'stdout' => true,
'stream' => true
], function ($chunk) {
echo $chunk;
});
How can I help you explore Laravel packages today?