Fix wordpress.sh picking an already-occupied port
Reported live: a fresh site's container failed to start with "address already in use" on its assigned port. wordpress.sh scanned for a free port by grepping `docker ps -a`'s port list — that only reflects ports Docker itself currently has bound, so it's blind to ports held by non-Docker processes or anything Docker isn't reporting cleanly at that instant. Every other service in this repo scans with find_free_port (checks actual OS-level listening sockets via ss) per CLAUDE.md's "Port collision avoidance" section; wordpress.sh was the one holdout still using its own weaker check. Switched to the shared helper, already available in this file's own standalone stub and via lib/common.sh — no new dependency, just using what was already sitting there unused.
This commit is contained in:
@@ -316,10 +316,15 @@ install_wordpress() {
|
|||||||
[ -n "$WP_ADMIN_PASS" ] || WP_ADMIN_PASS="$(generate_password 16)"
|
[ -n "$WP_ADMIN_PASS" ] || WP_ADMIN_PASS="$(generate_password 16)"
|
||||||
|
|
||||||
# ── Free host port (multiple sites can't all bind the same one) ─────────
|
# ── Free host port (multiple sites can't all bind the same one) ─────────
|
||||||
|
# Was checking `docker ps -a` port lists — only catches ports Docker
|
||||||
|
# itself currently has bound, not ports held by non-Docker processes or
|
||||||
|
# anything else on the host. Confirmed live: this let a fresh site pick
|
||||||
|
# an already-occupied port ("address already in use" at container
|
||||||
|
# start). find_free_port checks actual OS-level listening sockets via
|
||||||
|
# ss, the same convention every other service here follows — see
|
||||||
|
# CLAUDE.md's "Port collision avoidance" section.
|
||||||
local WEB_PORT=8090
|
local WEB_PORT=8090
|
||||||
while docker ps -a --format '{{.Ports}}' 2>/dev/null | grep -q ":${WEB_PORT}->"; do
|
find_free_port WEB_PORT "$WEB_PORT"
|
||||||
WEB_PORT=$((WEB_PORT + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
mkdir -p "$DIR/html" "$DIR/db" "$DIR/uploads-ini.d"
|
mkdir -p "$DIR/html" "$DIR/db" "$DIR/uploads-ini.d"
|
||||||
ensure_docker_dir_ownership "$DIR"
|
ensure_docker_dir_ownership "$DIR"
|
||||||
|
|||||||
Reference in New Issue
Block a user