Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah yang perlu saya lakukan jika bekas docker tidak dapat berkomunikasi antara satu sama lain?

Apakah yang perlu saya lakukan jika bekas docker tidak dapat berkomunikasi antara satu sama lain?

PHPz
PHPzasal
2023-04-25 09:01:163231semak imbas

Docker ialah platform kontena sumber terbuka yang popular yang memudahkan pembangun dan pengendali mencipta, menggunakan dan menjalankan aplikasi. Docker mencapai pengasingan dengan menjalankan berbilang bekas maya pada satu hos, setiap satunya boleh menjalankan aplikasi atau perkhidmatan yang berbeza.

Walau bagaimanapun, kadangkala kami menghadapi masalah seperti itu: berbilang bekas Docker digunakan pada hos yang sama dan bekas tidak boleh mengakses satu sama lain. Ini sangat menyusahkan untuk pembangunan dan operasi dan kakitangan penyelenggaraan, kerana komunikasi antara bekas adalah kunci kepada operasi biasa aplikasi.

Artikel ini akan membincangkan sebab bekas Docker tidak boleh berkomunikasi antara satu sama lain dan menyediakan penyelesaian.

  1. Isu konfigurasi rangkaian kontena

Setiap bekas Docker diberikan alamat IP secara lalai dan alamat IP ini hanya boleh diakses pada mesin hos. Jika berbilang bekas diberikan alamat IP yang sama, bekas itu tidak boleh mengakses satu sama lain. Pada masa ini, kita perlu mengkonfigurasi semula alamat rangkaian kontena.

Pertama, kita boleh menggunakan perintah ls network docker untuk melihat konfigurasi rangkaian Docker. Sebagai contoh, kita boleh menggunakan arahan berikut untuk melihat maklumat rangkaian lalai:

$ docker network ls

Seterusnya, kita boleh menggunakan perintah pemeriksaan rangkaian docker untuk melihat konfigurasi rangkaian bekas, contohnya:

$ docker network inspect bridge

Jika terdapat masalah dengan konfigurasi rangkaian bekas, kami boleh menggunakan arahan berikut untuk memulakan semula bekas dan menentukan alamat IP:

$ docker run -itd --name mycontainer1 --network mynetwork --ip 172.18.0.10 myimage

Dalam arahan ini, kami nyatakan nama , nama rangkaian dan alamat IP bekas.

  1. Isu konfigurasi kumpulan keselamatan

Sebab lain mengapa bekas Docker tidak boleh mengakses satu sama lain ialah kumpulan keselamatan tidak dikonfigurasikan dengan betul. Kumpulan keselamatan ialah tembok api maya yang mengawal trafik rangkaian memasuki dan meninggalkan bekas. Jika peraturan kumpulan keselamatan kontena tidak membenarkan kontena lain mengakses, maka kontena tidak boleh mengakses satu sama lain.

Kami boleh menggunakan tetapan rangkaian dalam Docker untuk mengkonfigurasi peraturan kumpulan keselamatan. Sebagai contoh, kita boleh menggunakan arahan berikut untuk mencipta rangkaian baharu dan menentukan peraturan komunikasi antara bekas:

$ docker network create --subnet 172.18.0.0/16 mynetwork

Dalam arahan ini, kami mencipta rangkaian baharu bernama mynetwork dan Tentukan subnet rangkaian ini.

Seterusnya, kita boleh menggunakan arahan docker run untuk memulakan bekas dan menambahkannya ke rangkaian. Sebagai contoh, kita boleh menggunakan arahan berikut untuk memulakan dua bekas dan menambahkannya pada rangkaian mynetwork:

$ docker run -d --name mycontainer1 --network mynetwork --ip 172.18.0.2 myimage
$ docker run -d --name mycontainer2 --network mynetwork --ip 172.18.0.3 myimage

Dalam arahan ini, kami memulakan dua bekas masing-masing dan menetapkannya kepada mynetwork dalam rangkaian. Ambil perhatian bahawa kami menentukan alamat IP setiap bekas untuk memastikan mereka boleh berkomunikasi antara satu sama lain.

Akhir sekali, kita boleh menggunakan perintah iptables untuk mengkonfigurasi peraturan kumpulan keselamatan, contohnya:

$ iptables -I DOCKER-USER -i mynetwork ! -s 172.18.0.0/16 -d 172.18.0.0/16 -j DROP

Dalam arahan ini, kami menetapkan peraturan yang menghalang rangkaian lain daripada mengakses bekas rangkaian mynetwork. Dengan cara ini, kita boleh memastikan bahawa komunikasi antara bekas adalah selamat.

  1. Isu konfigurasi DNS

Kami tahu bahawa bekas Docker boleh mengakses satu sama lain melalui nama kontena dan alamat IP. Walau bagaimanapun, jika nama kontena tidak dapat diselesaikan ke alamat IP, kontena tidak boleh mengakses satu sama lain.

Pada masa ini, kami perlu mengkonfigurasi pelayan DNS Docker. Docker menggunakan pelayan DNS Google lalai untuk menyelesaikan nama domain, tetapi kami juga boleh menggunakan pelayan DNS lain.

Untuk mengkonfigurasi pelayan DNS Docker, kami boleh mengedit fail daemon.json Docker. Contohnya, dalam sistem Linux, kita boleh menggunakan arahan berikut untuk membuka fail ini:

$ sudo vi /etc/docker/daemon.json

Dalam fail ini, kita boleh menentukan pelayan DNS Docker. Contohnya:

{
  "dns": ["8.8.8.8", "8.8.4.4"]
}

Dalam konfigurasi ini, kami menentukan dua pelayan DNS, iaitu pelayan DNS Google.

Selepas selesai, kami boleh memulakan semula perkhidmatan Docker untuk menjadikan konfigurasi berkuat kuasa:

$ sudo systemctl restart docker

Kini, kami boleh menggunakan nama bekas Docker untuk mengakses bekas lain.

Kesimpulan

Masalah yang kontena Docker tidak dapat berkomunikasi antara satu sama lain mungkin masalah dengan konfigurasi rangkaian kontena, konfigurasi kumpulan keselamatan atau konfigurasi DNS. Dengan menyemak konfigurasi ini dan membuat perubahan yang diperlukan, kami boleh menyelesaikan isu ini dengan mudah.

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika bekas docker tidak dapat berkomunikasi antara satu sama lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn