docker는 내 브리지 이름이 보이지 않는 네트워크와 충돌한다고 불평합니다.

docker는 내 브리지 이름이 보이지 않는 네트워크와 충돌한다고 불평합니다.

컴퓨터를 다시 시작하고 docker.service를 비활성화하면 내 IP a의 출력에 br1이 없습니다.

그러나 docker를 시작한 후 br1이 나타납니다.

그러나 sudo docker network inspect관련 네트워크는 표시되지 않습니다.

Error response from daemon: cannot create network 33618cb1603a773a11d97750182fde9d8feb98c03a9882bb0c4539c3ea3fbe1d (br1): conflicts with network aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106 (br1): networks have same bridge name

sudo docker network inspect aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106
[]
Error response from daemon: network aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106 not found

그렇다면 이 네트워크는 어디에 있으며 어떻게 찾을 수 있습니까?

그렇게 했는데 sudo docker network prune이제 3개의 항목만 남았습니다. 그러나 br1은 여전히 ​​생성됩니다.

답변1

이는 Docker 네트워크 삭제에 실패하고 브리지 레코드가 데이터베이스에 남아 있는 경우 발생합니다. 데이터베이스 위치는 /var/lib/docker/network/files/local-kv.db(AlmaLinux)입니다. 일반적인 조언은 Docker를 중지하고, 이 데이터베이스를 삭제하고, 컨테이너를 다시 빌드하는 것이지만, 이는 대규모 인프라에 가장 적합한 솔루션은 아닙니다. 이 경우 더 나은 해결책은 데이터베이스에서 나머지 브리지 레코드를 삭제하는 것입니다. 이는 Boltcli 도구(https://github.com/spacewander/boltcli).

  1. go가 설치되었다고 가정하고 boltcli를 설치합니다. go install github.com/spacewander/boltcli@latest

  2. local-kv.db를 복사하고 Boltcli를 사용하여 엽니다. boltcli /path_to_db_copy/local-kv.db

  3. 사용할 버킷을 나열하십시오. buckets * 버킷은 "libnetwork"일 가능성이 높습니다.

  4. 충돌하는 네트워크(또는 그 일부)의 ID를 기반으로 키를 찾습니다(질문의 aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106).

    keys libnetwork *aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106*

  5. 반환된 키(아마도 "docker/network/v1.0/bridge/aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106/")를 사용하여 레코드를 삭제합니다.

    del libnetwork docker/network/v1.0/bridge/aed743fd32b35084f5ccee11e4cfb631b31dccb2fec79cba60cd5f4252b03106/

  6. boltcli( Ctrl+ C)를 종료하고 Docker를 중지한 후 원본 데이터베이스 파일을 변경된 데이터베이스 파일로 덮어씁니다(이 작업을 수행하기 전에 원본 데이터베이스 파일을 복사하는 것이 좋습니다). 도커를 시작하세요.

관련 정보