Cumartesi, Aralık 21, 2024

Silinmeyen Docker Ağları Otomatik Olarak Nasıl Kaldırılır?

yüksek çözünürlüklü docker logosu

docker compose kurulumlarda çok fazla kullanılıyor pratikte çokta işe yarıyor ama zaman zaman hataya düşebiliyor, bir işlem yapıyorsunuz ve çakışmalara, aynı ağ adlarını almaya başlıyor.

Bu durumda docker güncellemelerinde ve/veya sistem güncellemelerinden sonra ortaya çıkıyor. Ağların ve konteyner’ların başlamasına engel oluyor.

Örnek bir hata mesajı

Sep 01 18:30:15 debian docker compose[2281641]: Removing network mertcan_default
Sep 01 18:30:15 debian docker compose[2281641]: network mertcan_default is ambiguous (2 matches found based on name)
Sep 01 18:30:16 debian systemd[1]: mertcan_default.service: Control process exited, code=exited, status=1/FAILURE

Aşağıdaki gibi yazdığımız ufacık bir python kodu ile sistemden başa bela olan bu ağları otomatik kaldırma işlemi yapabilirsiniz.

import subprocess
import json
import logging

logger = logging.getLogger(__name__)

output = subprocess.check_output(["docker", "network", "ls", "--format", "{{json .}}"])
networks = set()  # use a set to avoid duplicates

for line in output.decode("utf-8").splitlines():
    # check line is not empty
    if not line:
        logger.debug("Empty line found in docker network ls output (ignoring)")
        continue

    network = json.loads(line)
    if network["Name"] in networks:
        logger.info("Removing duplicate network: %s", network["Name"])
        subprocess.check_call(["docker", "network", "rm", network["Name"]])

    networks.add(network["Name"])