Current section
Files
Jump to
Current section
Files
lib/docker/api.ex
defmodule Docker.Api do
alias Docker.{Client, Container, ContainerState}
@one_minute 60_000
def ping() do
case Client.get("/_ping") do
{:ok, %{status: 200}} -> :ok
{:ok, %{status: status}} -> {:error, {:http_error, status}}
{:error, message} -> {:error, message}
end
end
def inspect_container(container_id) do
case Client.get("/containers/#{container_id}/json") do
{:ok, %{status: 200, body: body}} -> {:ok, ContainerState.parse_docker_response(body)}
{:ok, %{status: status}} -> {:error, {:http_error, status}}
{:error, message} -> {:error, message}
end
end
defdelegate create_container(container_config, name \\ nil), to: Container, as: :create
defdelegate start_container(container_id), to: Container, as: :start
defdelegate stop_container(container_id, options \\ []), to: Container, as: :stop
defdelegate exec_and_wait(container_id, command), to: Docker.Exec, as: :exec_and_wait
def pull_image(name) do
case Tesla.post(Client.plain_text(), "/images/create", "",
query: %{fromImage: name},
opts: [adapter: [recv_timeout: @one_minute]]
) do
{:ok, %{status: 200}} -> :ok
{:ok, %{status: status}} -> {:error, {:http_error, status}}
{:error, message} -> {:error, message}
end
end
end