Current collected state Current
Observed since 21 Oct, 11:49 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
aiodocker
A simple Docker HTTP API wrapper written with asyncio and aiohttp.
==============================
AsyncIO bindings for docker.io
==============================
.. image:: https://badge.fury.io/py/aiodocker.svg
:target: https://badge.fury.io/py/aiodocker
:alt: PyPI version
.. image:: https://img.shields.io/pypi/pyversions/aiodocker.svg
:target: https://pypi.org/project/aiodocker/
:alt: Python Versions
.. image:: https://github.com/aio-libs/aiodocker/actions/workflows/ci-cd.yml/badge.svg?branch=main
:target: https://github.com/aio-libs/aiodocker/actions/workflows/ci-cd.yml?query=branch%3Amain
:alt: GitHub Actions status for the main branch
.. image:: https://codecov.io/gh/aio-libs/aiodocker/branch/main/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/aiodocker
:alt: Code Coverage
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/aio-libs/Lobby
:alt: Chat on Gitter
A simple Docker HTTP API wrapper written with asyncio and aiohttp.
Installation
============
.. code-block:: sh
pip install aiodocker
Development
===========
The recommended developer setup uses `uv <https://docs.astral.sh/uv/>`_, which
manages the virtualenv and resolves dependencies from the committed
``uv.lock`` so every contributor and CI job builds against the same versions.
.. code-block:: sh
# Install uv first: https://docs.astral.sh/uv/getting-started/installation/
uv sync --extra dev --extra lint --extra test --extra doc
uv run pre-commit install
The ``Makefile`` helpers (``make develop``, ``make install``, ``make lint``,
``make test``) all assume uv.
Using pip instead (fallback)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you can't install uv, you can still bootstrap with pip. The resulting
environment isn't pinned to ``uv.lock``, so versions may drift from CI.
.. code-block:: sh
python -m venv .venv && source .venv/bin/activate
pip install -U pip
pip install -e '.[dev,lint,test,doc]' # in zsh, you need to escape brackets
pre-commit install
Running tests
~~~~~~~~~~~~~
.. code-block:: sh
# Run all tests
make test
# Run individual tests
uv run pytest tests/test_images.py
Building packages
~~~~~~~~~~~~~~~~~
NOTE: Usually you don't need to run this step by yourself.
.. code-block:: sh
uv build
Documentation
=============
http://aiodocker.readthedocs.io
Examples
========
.. code-block:: python
import asyncio
import aiodocker
async def list_things(docker):
print('== Images ==')
for image in (await docker.images.list()):
tags = image['RepoTags'][0] if image['RepoTags'] else ''
print(image['Id'], tags)
print('== Containers ==')
for container in (await docker.containers.list()):
print(f" {container._id}")
async def run_container(docker):
print('== Running a hello-world container ==')
container = await docker.containers.create_or_replace(
config={
'Cmd': ['/bin/ash', '-c', 'echo "hello world"'],
'Image': 'alpine:latest',
},
name='testing',
)
await container.start()
logs = await container.log(stdout=True)
print(''.join(logs))
await container.delete(force=True)
async def main():
docker = aiodocker.Docker()
await list_things(docker)
await run_container(docker)
await docker.close()
if __name__ == "__main__":
asyncio.run(main())
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
aiohttpEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | aiohttp<4.0,>=3.11.13 | runtime |
aiohttpEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | aiohttp==3.13.5; extra == "dev" | runtime |
towncrierEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | towncrier==25.8.0; extra == "dev" | runtime |
alabasterEnvironment{
"extras": "",
"marker": "extra == \"doc\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | alabaster==1.0.0; extra == "doc" | runtime |
sphinxEnvironment{
"extras": "",
"marker": "extra == \"doc\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | sphinx==8.1.3; extra == "doc" | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"lint\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | mypy==1.20.2; extra == "lint" | runtime |
pre-commitEnvironment{
"extras": "",
"marker": "extra == \"lint\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | pre-commit>=3.5.0; extra == "lint" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"lint\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | ruff==0.15.11; extra == "lint" | runtime |
types-paramikoEnvironment{
"extras": "",
"marker": "extra == \"lint\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | types-paramiko; extra == "lint" | runtime |
asyncsshEnvironment{
"extras": "",
"marker": "extra == \"ssh\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | asyncssh>=2.14.0; extra == "ssh" | runtime |
paramikoEnvironment{
"extras": "",
"marker": "extra == \"ssh\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | paramiko>=2.9.0; extra == "ssh" | runtime |
async-timeoutEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | async-timeout~=5.0.1; extra == "test" | runtime |
asyncsshEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | asyncssh>=2.14.0; extra == "test" | runtime |
codecovEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | codecov==2.1.13; extra == "test" | runtime |
packagingEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | packaging==26.1; extra == "test" | runtime |
paramikoEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | paramiko>=2.9.0; extra == "test" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio==1.3.0; extra == "test" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | pytest-cov==7.1.0; extra == "test" | runtime |
pytest-sugarEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | pytest-sugar==1.1.1; extra == "test" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | pytest==9.0.3; extra == "test" | runtime |
testcontainersEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10.0",
"evaluation": "NOT_EVALUATED"
} | testcontainers==4.14.2; extra == "test" | runtime |
bdist_wheel · 53.75 KB · Python py3
sdist · 320.51 KB · Python source
Observed since 21 Oct, 11:49 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:9d305f6b57fcfe3fb8d75d0bdd5372d6b0bc7eb8361e139417e7e4a9aedbae34