Mengkonfigurasi Docker untuk tidak menggunakan rentang 172.17.0.0

Karena masalah dengan captive portal dan rentang IP Docker default, saya mencoba membuat Docker menggunakan rentang 198.18.0.0, bukan 172.17.0.0, yang berbenturan dengan captive portal yang digunakan di kereta tempat saya tinggal.

Berikut the docs, Saya buat /etc/docker/daemon.json, dan masukkan yang berikut ini ke dalamnya:

{    "bip":"198.18.0.0/16"}

Ini berfungsi untuk docker0, tetapi tampaknya tidak memengaruhi jaringan lain mana pun, dan menggunakan docker compose, jaringan pertama yang dibuat adalah 172.17.0.0, yang membuat ulang bentrokan.

Apa yang dapat saya lakukan untuk mengubah subnet default semua jaringan docker (lebih disukai tanpa harus menyatakan rentang IP khusus saya di setiap file penulisan)?

Hal ini dimungkinkan untuk mendefinisikan kembali rentang default.

$ docker -vDocker version 18.06.0-ce, build 0ffa825

Mengedit atau membuat file konfigurasi untuk docker daemon:

# nano /etc/docker/daemon.json

Tambahkan baris:

{  "default-address-pools":  [    {"base":"10.10.0.0/16","size":24}  ]}

Mulai ulang dockerd:

# service docker restart

Periksa hasilnya:

$ docker network create foo$ docker network inspect foo | grep Subnet                    "Subnet": "10.10.1.0/24"

Ini berfungsi untuk docker-compose juga. Info lebih lanjut di sini https://github.com/moby/moby/pull/29376 (digabung)

Ada tiga tempat docker akan menghasilkan subnet jaringan.

  • Jembatan default
  • Jaringan jembatan buatan pengguna
  • Mode Swarm menghasilkan jaringan overlay

Untuk jembatan default (disebut "jembatan"), Anda dapat menentukan BIP (saya yakin itu IP Jembatan; pastikan itu adalah IP host, bukan IP jaringan) dalam daemon.json file. Dan untuk jaringan jembatan yang dibuat pengguna, Anda dapat menentukan kumpulan subnet untuk dipilih (dengan asumsi pengguna tidak menentukan subnet secara manual). Untuk kedua, Anda /etc/docker/daemon.json akan terlihat seperti:

{  "bip": "10.200.0.1/24",  "default-address-pools":[    {"base":"10.201.0.0/16","size":24},    {"base":"10.202.0.0/16","size":24}  ]}

Setiap pengaturan kumpulan alamat di atas mendefinisikan rentang CIDR dan ukuran subnet yang akan dialokasikan dari rentang itu. Jadi di atas mendefinisikan dua rentang kelas B yang dialokasikan sebagai jaringan kelas C (/24). Anda memerlukan setidaknya 18.06 untuk kumpulan alamat default. Anda perlu memuat ulang daemon docker agar perubahan ini diterapkan (systemctl reload docker). Dan perubahan ini hanya akan memodifikasi jaringan pengguna yang baru dibuat, jadi Anda harus menghentikan kontainer dan menghapus jaringan yang ada dalam rentang yang salah.


Pada 18.09, Docker menambahkan kemampuan untuk menentukan rentang alamat untuk jaringan overlay yang dihasilkan mode swarm. Ini hanya dapat dilakukan pada saat pembuatan swarm sekarang, semoga itu akan diperbarui di masa mendatang untuk memungkinkan docker swarm update untuk menyesuaikan kolam ini:

$ docker swarm init \  --default-addr-pool 10.202.0.0/16 \  --default-addr-pool 10.203.0.0/16 \  --default-addr-pool-mask-length 24

Saya menggunakan Docker Desktop dalam Windows sistem operasi dan saya mencoba untuk mengubah IP Jembatan default.

Docker melempar kesalahan dan meminta saya untuk mengatur ulang pengaturan setiap kali saya mencoba mengubah hanya bip dalam pengaturan.

Ini berhasil: (harus menyelam lebih dalam dan memahami cara kerjanya)

{  "bip": "192.168.1.5/24",   "fixed-cidr": "192.168.1.5/25",   "default-address-pools":[      { "base":"192.168.2.5/24", "size":28 }  ]}

Mengkonfigurasi jaringan jembatan default: "...Untuk mengkonfigurasi jaringan jembatan default, Anda menentukan opsi di daemon.json. Berikut adalah contoh daemon.json dengan beberapa opsi yang ditentukan. Hanya tentukan pengaturan yang perlu Anda sesuaikan. …"

Dengan compose: Tentukan jaringan kustom: "...Alih-alih hanya menggunakan jaringan aplikasi default, Anda dapat menentukan jaringan Anda sendiri dengan kunci jaringan tingkat atas. Ini memungkinkan Anda membuat topologi yang lebih kompleks dan menentukan driver dan opsi jaringan khusus. Anda juga dapat menggunakannya untuk menghubungkan layanan ke jaringan yang dibuat secara eksternal yang tidak dikelola oleh Compose. …"

Mungkin sedikit brutal tapi saya hanya melakukan sudo ifconfig docker0 down untuk mematikan antarmuka yang bertentangan dengan wifi yang saya coba gunakan.