network_mode: service:vpn dan nama hos db yang hilang
Berkongsi ruang nama VPN ialah pilihan topologi. Sama ada db mengekalkan alamatnya sendiri dan vpn menyertai rangkaian itu, atau semuanya menjawab pada loopback.
Anda menambah network_mode: service:vpn pada aplikasi, memulakan semula timbunan, dan aplikasi mati kerana db tidak lagi diselesaikan. Tiada apa yang dinamakan semula dalam fail compose, jadi suspek jelas ialah DNS dan pangkalan data. Perubahan sebenar lebih kecil dan lebih pelik: aplikasi berhenti menjadi ahli rangkaian Compose tempat nama itu wujud. Sehingga anda memutuskan dari ruang nama mana pangkalan data harus menjawab, setiap pembetulan nama hos ialah tekaan.
Mengapa nama hos db berhenti diselesaikan
Perkhidmatan yang menggunakan network_mode tiada alamat sendiri pada rangkaian Compose; ia meminjam ruang nama perkhidmatan yang dinamakan. Ruang nama itu membawa antara muka, laluan, ruang port dan penyelesai sendiri, dan ia menggantikan lekatan aplikasi pada rangkaian backend. Nama db tidak pernah abstrak: ia hidup pada rangkaian itu dan diselesaikan melalui DNS terbina dalamnya. Buang lekatan itu dan nama itu tiada tempat untuk diselesaikan.
Sahkan perkara itu dari dalam kontena dan bukan dari hos. Carian yang gagal dalam aplikasi tetapi berjaya dalam kontena pangkalan data bermakna nama itu betul dan keahliannya tidak. Hasil itu juga meletakkan pembetulan dalam topologi compose dan bukan dalam tetapan penyelesai aplikasi.
Tiga soalan sebelum anda menyunting fail
Jawab mengikut urutan, kerana setiap satu menyempitkan topologi. Apa yang pangkalan data harus jawab: nama hos yang digunakan kontena lain, atau hanya aplikasi pada loopback? Perlukah aplikasi menerbitkan port kepada hos, dan perkhidmatan mana yang akan memilikinya? Perlukah pangkalan data boleh dicapai dari hos atau dari mesin lain, atau hanya dari dalam terowong?
Jika pangkalan data memerlukan namanya sendiri dan aplikasi tidak menerbitkan apa-apa, kekalkan keduanya pada lekatan berasingan. Jika aplikasi mesti menerbitkan port dan semuanya melalui terowong, letakkan pangkalan data dalam ruang nama VPN dan gunakan loopback. Mencampurkan kedua-duanya menghasilkan timbunan yang bermula bersih dan gagal semasa menyambung.
Biarkan pangkalan data di tempatnya
Perubahan lebih kecil melampirkan pemilik ruang nama pada rangkaian yang sudah mengandungi pangkalan data. Aplikasi mewarisi lekatan itu kerana berkongsi timbunan vpn, dan db diselesaikan sama seperti sebelum ini.
services:
vpn:
networks:
- backend
app:
network_mode: service:vpn
db:
networks:
- backend
networks:
backend:Jangan tambah networks pada aplikasi juga. Compose menolak sifat itu bersama network_mode dalam perkhidmatan yang sama, dan ralat menunjuk fail dan bukan pasangan itu. Jika klien VPN menapis destinasi backend dalam ruang namanya, laraskan juga dasar rangkaian tempatan yang disokongnya; lekatan dikongsi menawarkan laluan tetapi tidak mengatasi penapis itu.
Pindahkan pangkalan data ke ruang nama
Perubahan lebih besar meletakkan pangkalan data dalam ruang nama yang sama dan mengarahkan aplikasi ke 127.0.0.1 dengan port sebenar. Dua proses tidak boleh kedua-duanya mengikat alamat dan port yang sama hanya kerana ia bermula dalam kontena berbeza, jadi pangkalan data yang juga mendengar pada alamat wildcard akan berlanggar dengan apa sahaja yang berbuat demikian. Periksa pendengar sebelum memindahkannya.
Port yang diterbitkan milik perkhidmatan pemilik ruang nama. Menambah ports pada aplikasi ditolak bersama network_mode, dan mencipta alamat aplikasi berasingan menggambarkan antara muka yang tidak wujud.
Ketersediaan, penyekatan dan penyelesai
depends_on menyusun permulaan kontena; ia bukan bukti terowong hidup, dan ia tidak menghentikan trafik apabila terowong jatuh. Anggap kebolehcapaian, kesediaan terowong dan penyekatan kegagalan sebagai tiga keperluan berasingan. Timbunan yang memenuhi yang pertama sahaja lulus ujian manual pada hari baik dan bocor pada hari buruk. Tulis ketiga-tiga jawapan di sebelah fail compose, di tempat orang seterusnya akan melihat.
Berkongsi ruang nama juga bermakna aplikasi mewarisi penyelesai kontena VPN, yang membantu apabila terowong menolak pelayan DNS dan mengelirukan apabila tidak. Periksa apa yang sebenarnya terkandung dalam ruang nama dan bukan menganggap penyelesai hos terpakai. Rujukan perkhidmatan Compose mendokumenkan network_mode, ports dan tingkah laku kebergantungan di satu tempat, termasuk mengapa perkhidmatan network_mode tiada alamat sendiri.