Free web-static ports by removing containers that publish them
Sync runner checkout / sync (pull_request) Successful in 7s

Before compose up, docker rm -f any container bound to the host ports from host_apps so orphan/legacy publishers cannot block the nginx bind; force-recreate when cleanup ran.
This commit is contained in:
2026-08-06 10:45:54 -05:00
parent 20c2d6c418
commit 10ef7fb68c
2 changed files with 33 additions and 3 deletions
+30 -2
View File
@@ -39,9 +39,34 @@
mode: "0644"
register: _compose_file
# Free host ports before bind. Catches leftover/orphan containers from older
# compose projects that still publish 8080/8081/etc. Includes the current
# web-static container when present — compose up recreates it next.
- name: web-static | find containers publishing static ports
ansible.builtin.command:
cmd: docker ps -q --filter publish={{ item }}
loop: "{{ _static_apps | map(attribute='port') | list | unique }}"
register: _port_holders
changed_when: false
become: true
- name: web-static | unique container ids on static ports
ansible.builtin.set_fact:
_stale_port_cids: "{{ _port_holders.results | map(attribute='stdout_lines') | flatten | unique | list }}"
- name: web-static | remove containers holding static ports
ansible.builtin.command:
cmd: "docker rm -f {{ _stale_port_cids | join(' ') }}"
when: _stale_port_cids | length > 0
become: true
changed_when: true
register: _stale_port_rm
- name: web-static | start container
ansible.builtin.command:
cmd: "docker compose up -d --remove-orphans{{ ' --force-recreate' if (_compose_file is changed) else '' }}"
cmd: >-
docker compose up -d --remove-orphans
{{ '--force-recreate' if (_compose_file is changed or (_stale_port_rm is changed)) else '' }}
chdir: "{{ web_static_dir }}"
become: true
become_user: "{{ admin_user }}"
@@ -53,5 +78,8 @@
chdir: "{{ web_static_dir }}"
become: true
become_user: "{{ admin_user }}"
when: _nginx_conf is changed and _compose_file is not changed
when:
- _nginx_conf is changed
- _compose_file is not changed
- _stale_port_rm is not changed
changed_when: true