CI steps run inside Docker containers on the wp-agent hosts, and Docker gives containers no IPv6 by default — so even though the agents have v6 egress, step-containers do not, and deploys to IPv6-only hosts fail with Network unreachable. Confirmed: the deploy-netbird-proxy pipeline (PR #47) cannot SSH the v6-only proxy-1 (connect to ... port 22: Network unreachable).
Writes /etc/docker/daemon.json on the agents with ipv6 + a ULA fixed-cidr-v6 + ip6tables (IPv6 NAT), so step-containers get NAT'd v6 egress through the host's existing v6.
Apply
Requires Docker 27+ (ip6tables stable). Applying restarts Docker on the agents → interrupts running pipelines, and there is no agent-deploy pipeline by design (you can't restart Docker on the agents from the agents). Apply out-of-band: ansible-playbook -i inventory/ plays/install-woodpecker-agent.yml, draining the agents first.
Unblocksdeploy-netbird-proxy (PR #47) reaching proxy-1. Merge order: this first (+ apply), then PR #47.
🤖 Generated with Claude Code
CI steps run inside Docker containers on the `wp-agent` hosts, and **Docker gives containers no IPv6 by default** — so even though the agents have v6 egress, step-containers do not, and deploys to IPv6-only hosts fail with `Network unreachable`. Confirmed: the `deploy-netbird-proxy` pipeline (PR #47) cannot SSH the v6-only `proxy-1` (`connect to ... port 22: Network unreachable`).
Writes `/etc/docker/daemon.json` on the agents with `ipv6` + a ULA `fixed-cidr-v6` + `ip6tables` (IPv6 NAT), so step-containers get NAT'd v6 egress through the host's existing v6.
### Apply
Requires Docker 27+ (ip6tables stable). Applying **restarts Docker** on the agents → interrupts running pipelines, and there is no agent-deploy pipeline by design (you can't restart Docker on the agents from the agents). Apply out-of-band: `ansible-playbook -i inventory/ plays/install-woodpecker-agent.yml`, draining the agents first.
**Unblocks** `deploy-netbird-proxy` (PR #47) reaching `proxy-1`. Merge order: this first (+ apply), then PR #47.
🤖 Generated with Claude Code
CI steps run inside Docker containers on the wp-agents, and Docker gives
containers no IPv6 by default — so deploys to IPv6-only hosts fail with
"Network unreachable" even when the agent host itself has v6 (confirmed:
the deploy-netbird-proxy pipeline can't SSH the v6-only proxy-1).
Write /etc/docker/daemon.json with ipv6 + a ULA fixed-cidr-v6 + ip6tables
(IPv6 NAT), so step containers get NAT'd v6 egress through the host.
Caveats:
- Requires Docker 27+ (ip6tables stable) and the agent HOSTS to have v6
egress themselves (the .srv VLAN must route v6).
- Applying notifies a docker restart, which interrupts running pipelines
(including the one applying it, if run via a pipeline on the agents).
Apply deliberately — out-of-band, or expect the triggering run to die on
the restart and re-run it.
Unblocks the deploy-netbird-proxy pipeline (PR #47) reaching proxy-1.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
CI steps run inside Docker containers on the
wp-agenthosts, and Docker gives containers no IPv6 by default — so even though the agents have v6 egress, step-containers do not, and deploys to IPv6-only hosts fail withNetwork unreachable. Confirmed: thedeploy-netbird-proxypipeline (PR #47) cannot SSH the v6-onlyproxy-1(connect to ... port 22: Network unreachable).Writes
/etc/docker/daemon.jsonon the agents withipv6+ a ULAfixed-cidr-v6+ip6tables(IPv6 NAT), so step-containers get NAT'd v6 egress through the host's existing v6.Apply
Requires Docker 27+ (ip6tables stable). Applying restarts Docker on the agents → interrupts running pipelines, and there is no agent-deploy pipeline by design (you can't restart Docker on the agents from the agents). Apply out-of-band:
ansible-playbook -i inventory/ plays/install-woodpecker-agent.yml, draining the agents first.Unblocks
deploy-netbird-proxy(PR #47) reachingproxy-1. Merge order: this first (+ apply), then PR #47.🤖 Generated with Claude Code