fix: apply Docker 24 network workaround and smoke tests to production deploy #64
@@ -235,17 +235,47 @@ jobs:
|
|||||||
docker network create nas-dashboard_internal
|
docker network create nas-dashboard_internal
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create compose override with network_mode: none (Docker 24 compose
|
# Docker 24 compose fails when it can't connect external networks
|
||||||
# fails to create containers when it can't connect external networks).
|
# during container creation. Try compose first; if the container
|
||||||
# We connect networks manually after container creation.
|
# isn't created, strip networks from the resolved config via
|
||||||
echo 'services:' > /tmp/docker-compose.ci-override.yml
|
# docker compose config output (processed with Python json).
|
||||||
echo ' dashboard-dev:' >> /tmp/docker-compose.ci-override.yml
|
docker compose -f docker-compose.dev.yml -p nas-dashboard-dev up -d --pull never 2>&1 || true
|
||||||
echo ' network_mode: "none"' >> /tmp/docker-compose.ci-override.yml
|
|
||||||
|
|
||||||
# Deploy without networks in compose
|
if ! docker inspect nas-dashboard-dev >/dev/null 2>&1; then
|
||||||
docker compose -f docker-compose.dev.yml -f /tmp/docker-compose.ci-override.yml -p nas-dashboard-dev up -d --pull never
|
echo "Compose failed to create container, stripping networks from config..."
|
||||||
|
docker compose -f docker-compose.dev.yml config --format json 2>/dev/null | python3 -c "
|
||||||
|
import json, sys
|
||||||
|
cfg = json.load(sys.stdin)
|
||||||
|
cfg['services']['dashboard-dev']['networks'] = {}
|
||||||
|
cfg['networks'] = {}
|
||||||
|
with open('/tmp/no-network.yml', 'w') as f:
|
||||||
|
for k, v in cfg.items():
|
||||||
|
if k == 'services':
|
||||||
|
f.write('services:\n')
|
||||||
|
for svc, svc_cfg in v.items():
|
||||||
|
f.write(f' {svc}:\n')
|
||||||
|
for sk, sv in svc_cfg.items():
|
||||||
|
if sk == 'networks':
|
||||||
|
continue
|
||||||
|
elif isinstance(sv, dict):
|
||||||
|
f.write(f' {sk}:\n')
|
||||||
|
for dk, dv in sv.items():
|
||||||
|
f.write(f' {dk}: {json.dumps(dv) if not isinstance(dv, str) else dv}\n')
|
||||||
|
elif isinstance(sv, list):
|
||||||
|
f.write(f' {sk}:\n')
|
||||||
|
for e in sv:
|
||||||
|
f.write(f' {json.dumps(e) if not isinstance(e, str) else e}\n')
|
||||||
|
else:
|
||||||
|
f.write(f' {sk}: {json.dumps(sv) if not isinstance(sv, str) else sv}\n')
|
||||||
|
elif k == 'networks':
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
f.write(f'{k}: {json.dumps(v) if not isinstance(v, str) else v}\n')
|
||||||
|
"
|
||||||
|
docker compose -f /tmp/no-network.yml -p nas-dashboard-dev up -d --pull never
|
||||||
|
fi
|
||||||
|
|
||||||
# Manually connect to networks after container is created
|
# Connect networks after container is created (idempotent)
|
||||||
docker network connect nas-dashboard_internal nas-dashboard-dev 2>/dev/null || true
|
docker network connect nas-dashboard_internal nas-dashboard-dev 2>/dev/null || true
|
||||||
docker network connect gitea_gitea nas-dashboard-dev 2>/dev/null || true
|
docker network connect gitea_gitea nas-dashboard-dev 2>/dev/null || true
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user