Jadi, inilah masalah Anda:
Docker telah menetapkan rentang 172.17.0.1/16
ke docker0
Anda antarmuka. Ini mencakup semua alamat dari 172.17.0.1
melalui 172.17.255.255
. Anda akan melihat bahwa rentang ini mencakup server DNS Anda (172.17.100.3
dan 172.17.100.70
). Apa yang Anda miliki adalah masalah perutean:
Setiap kali Anda host perlu menjangkau server DNS Anda, ia melihat bahwa ia sudah memiliki antarmuka di jaringan yang sama (docker0
), sehingga mencoba merutekan paket menggunakan antarmuka itu...yang tentu saja tidak ke mana-mana, itulah sebabnya DNS Anda berhenti berfungsi.
Docker tidak memiliki mekanisme sederhana untuk mengecualikan rentang alamat dari proses pemilihan otomatisnya, jadi Anda mungkin perlu melakukan dua hal untuk menyelesaikan masalah:
Pertama, tetapkan alamat docker0
secara eksplisit di /etc/docker/daemon.json
Anda . Gunakan jaringan apa pun yang tidak bertentangan dengan jaringan internal Anda. Misalnya:
{
"bip": "172.31.0.1/16"
}
Anda harus memulai ulang Docker.
Selanjutnya, untuk mencegah Docker memilih rentang jaringan yang sama untuk jaringan yang ditentukan pengguna (jaringan yang Anda buat secara eksplisit menggunakan docker network create
atau secara implisit menggunakan, misalnya, docker-compose
atau docker stack ...
), buat jaringan baru dan jangan pernah menggunakannya:
docker network create --subnet 172.17.0.0/16 --config-only do_not_use
Ini akan menyelesaikan masalah Anda dan mencegahnya terpotong kembali di masa mendatang.
Perbarui
Docker sebenarnya mendokumentasikan cara yang bisa dibilang lebih baik untuk mencapai hal ini di Bagaimana cara memengaruhi rentang alamat jaringan mana yang dipilih Docker selama 'pembuatan jaringan buruh pelabuhan'?.
Ini memerlukan pengaturan rute statis persisten pada sistem Anda, yang bervariasi di antara distribusi Linux.