FAQ¶
These questions cover common decisions and surprises when using the
willhallonline/ansible Docker images and related GitHub Action.
Which tag should I use?
Use the most specific tag that matches your required Ansible version and base operating system. For repeatable automation, prefer a tag shaped around an Ansible version and base OS instead of a floating tag.
See the image tag reference for the exact tag list:
../images/tags.md.
Why is latest Alpine-based?
latest is intended to be a convenient default and has historically favoured
Alpine because it is small and quick to pull. It is not the best choice for
every workload.
If you need glibc compatibility, apt packages, or easier native Python wheel support, choose a Debian or Ubuntu tag explicitly.
How do I run against localhost inside the container?
Use a local connection in the playbook:
- hosts: localhost
connection: local
gather_facts: false
tasks:
- debug:
msg: "running locally in the container"
Then run with an inline localhost inventory:
Where should I mount my playbooks?
The examples in this site use /ansible:
/ansible is a convention, not a requirement. Use another path if your CI or
local workflow needs it, but keep the working directory and relative paths
consistent.
Is ARM or Apple Silicon supported?
Support depends on the published image manifest for the tag you choose and the upstream base images used for that tag. On Apple Silicon, Docker Desktop may run native ARM images when available or emulate another architecture when necessary.
If architecture matters for your workflow, inspect the tag before relying on it in CI and consider pinning a digest.
Why do some pip packages fail on Alpine?
Alpine uses musl libc rather than glibc. Some Python packages with native extensions either need Alpine build dependencies or do not publish compatible wheels.
Options include:
- use a Debian or Ubuntu image;
- install the required Alpine build packages in a derived image;
- choose Python packages that publish musl-compatible wheels.
How do I add extra Python dependencies?
For repeatable usage, build a derived image:
See the guide to extending images:
../usage/extending-images.md.
How often are images rebuilt?
The upstream repository uses Renovate for automated dependency updates and is rebuilt regularly as Ansible versions, base images, and dependencies change.
Because rebuilds can refresh packages under the same moving tag, pin exact tags or digests for production jobs.
Are old Ansible versions available?
Ansible core streams 2.9 through 2.17 are outside the active matrix and unmaintained. Historical image availability varies, so verify the exact tag in the upstream registry before depending on it.
Prefer current maintained Ansible versions unless you are supporting a legacy estate that cannot yet move forward.
What is the difference between ansible and ansible-core?
ansible-core contains the core Ansible engine and built-in plugins.
ansible is the community package that includes ansible-core plus a set of
community collections.
The images include both ansible-core and ansible, as well as
ansible-lint, so common playbook and lint workflows work out of the box.
How do I pin exactly?
Pin at least the Ansible version and base OS, for example an AnsibleVersion-BaseOS style tag such as:
For maximum immutability, pin the image digest:
Digests are the strongest way to guarantee that CI runs the same image bytes.
Can I use the images in GitHub Actions without the wrapper action?
Yes. You can run Docker directly in a workflow step, or you can use the Docker-based GitHub Action. The action is convenient when its interface fits your workflow; direct Docker commands are useful when you need complete control.
Why does Ansible try to SSH to localhost?
In Ansible, localhost can still use the default SSH connection unless you
tell it otherwise. Add connection: local to the play or set the connection
in inventory.
Can I install system packages at runtime?
You can, but it is usually better to build a derived image. Runtime package installation slows CI and can make jobs less repeatable.
Use a derived image when dependencies are part of the automation contract.
Can I run these images on self-hosted CI?
Yes, as long as the runner can run Docker and pull the selected image. Pin tags, configure credentials safely, and avoid assuming interactive terminals are available.
Where do I start?
Start with the quick start:
../getting-started/quick-start.md,
then choose a specific tag in ../images/tags.md.