Προσθέτετε το network_mode: service:vpn στην εφαρμογή, επανεκκινείτε τη στοίβα και η εφαρμογή πεθαίνει επειδή το db δεν επιλύεται πλέον. Τίποτα δεν μετονομάστηκε στο αρχείο compose, οπότε οι προφανείς ύποπτοι είναι το DNS και η βάση δεδομένων. Η πραγματική αλλαγή είναι μικρότερη και πιο παράξενη: η εφαρμογή έπαψε να είναι μέλος του δικτύου Compose όπου υπάρχει αυτό το όνομα. Μέχρι να αποφασίσετε από ποιον χώρο ονομάτων πρέπει να απαντά η βάση δεδομένων, κάθε διόρθωση ονόματος κεντρικού υπολογιστή είναι εικασία.

Γιατί το όνομα κεντρικού υπολογιστή db έπαψε να επιλύεται

Μια υπηρεσία που χρησιμοποιεί το network_mode δεν έχει δική της διεύθυνση σε δίκτυο Compose· δανείζεται τον χώρο ονομάτων της ονομασμένης υπηρεσίας. Αυτός ο χώρος φέρνει τις δικές του διεπαφές, διαδρομές, χώρο θυρών και επιλυτή, και αντικαθιστά τη σύνδεση της εφαρμογής στο δίκτυο backend. Το όνομα db δεν ήταν ποτέ αφηρημένο: ζούσε σε εκείνο το δίκτυο και επιλυόταν μέσω του ενσωματωμένου DNS του. Αφαιρέστε τη σύνδεση και το όνομα δεν έχει πού να επιλυθεί.

Επιβεβαιώστε το από μέσα στα κοντέινερ και όχι από τον κεντρικό υπολογιστή. Μια αναζήτηση που αποτυγχάνει στην εφαρμογή αλλά πετυχαίνει στο κοντέινερ της βάσης δεδομένων σημαίνει ότι το όνομα είναι εντάξει και η συμμετοχή δεν είναι. Αυτό το αποτέλεσμα τοποθετεί επίσης τη διόρθωση στην τοπολογία compose και όχι στις ρυθμίσεις επιλυτή της εφαρμογής.

Τρεις ερωτήσεις πριν επεξεργαστείτε το αρχείο

Απαντήστε τις με σειρά, γιατί καθεμία στενεύει την τοπολογία. Σε τι πρέπει να απαντά η βάση δεδομένων: σε όνομα κεντρικού υπολογιστή που χρησιμοποιούν άλλα κοντέινερ, ή μόνο στην εφαρμογή στο loopback; Πρέπει η εφαρμογή να δημοσιεύει θύρα στον κεντρικό υπολογιστή, και ποια υπηρεσία θα την κατείχε; Πρέπει η βάση δεδομένων να είναι προσβάσιμη από τον κεντρικό υπολογιστή ή από άλλο μηχάνημα, ή μόνο από μέσα στη σήραγγα;

Αν η βάση δεδομένων χρειάζεται δικό της όνομα και η εφαρμογή δεν δημοσιεύει τίποτα, κρατήστε τις σε χωριστές συνδέσεις. Αν η εφαρμογή πρέπει να δημοσιεύει θύρα και όλα περνούν από τη σήραγγα, βάλτε τη βάση δεδομένων στον χώρο ονομάτων VPN και χρησιμοποιήστε loopback. Η ανάμειξη των δύο παράγει στοίβα που ξεκινά καθαρά και αποτυγχάνει κατά τη σύνδεση.

Αφήστε τη βάση δεδομένων εκεί που είναι

Η μικρότερη αλλαγή συνδέει τον ιδιοκτήτη του χώρου ονομάτων στο δίκτυο που ήδη περιέχει τη βάση δεδομένων. Η εφαρμογή κληρονομεί αυτή τη σύνδεση επειδή μοιράζεται τη στοίβα vpn, και το db επιλύεται ακριβώς όπως πριν.

services:
  vpn:
    networks:
      - backend
  app:
    network_mode: service:vpn
  db:
    networks:
      - backend
networks:
  backend:

Μην προσθέσετε το networks και στην εφαρμογή. Το Compose απορρίπτει αυτή την ιδιότητα μαζί με το network_mode στην ίδια υπηρεσία, και το σφάλμα δείχνει το αρχείο και όχι το ζεύγος. Αν ο πελάτης VPN φιλτράρει τον προορισμό backend μέσα στον χώρο ονομάτων του, προσαρμόστε και την υποστηριζόμενη πολιτική τοπικού δικτύου του· μια κοινή σύνδεση προσφέρει διαδρομή αλλά δεν υπερισχύει αυτού του φίλτρου.

Μετακινήστε τη βάση δεδομένων στον χώρο ονομάτων

Η μεγαλύτερη αλλαγή βάζει τη βάση δεδομένων στον ίδιο χώρο ονομάτων και κατευθύνει την εφαρμογή στο 127.0.0.1 με την πραγματική θύρα. Δύο διεργασίες δεν μπορούν να δεσμεύσουν και οι δύο την ίδια διεύθυνση και θύρα μόνο επειδή ξεκίνησαν σε διαφορετικά κοντέινερ, οπότε μια βάση δεδομένων που ακούει επίσης στη διεύθυνση wildcard θα συγκρουστεί με ό,τι άλλο το κάνει. Ελέγξτε τον ακροατή πριν τον μετακινήσετε.

Οι δημοσιευμένες θύρες ανήκουν στην υπηρεσία που κατέχει τον χώρο ονομάτων. Η προσθήκη του ports στην εφαρμογή απορρίπτεται μαζί με το network_mode, και η επινόηση ξεχωριστής διεύθυνσης εφαρμογής περιγράφει μια διεπαφή που δεν υπάρχει.

Ετοιμότητα, αποκλεισμός και ο επιλυτής

Το depends_on ταξινομεί την εκκίνηση των κοντέινερ· δεν είναι απόδειξη ότι η σήραγγα είναι ενεργή και δεν σταματά την κίνηση όταν η σήραγγα πέσει. Αντιμετωπίστε την προσβασιμότητα, την ετοιμότητα της σήραγγας και τον αποκλεισμό αστοχιών ως τρεις ξεχωριστές απαιτήσεις. Μια στοίβα που ικανοποιεί μόνο την πρώτη περνά χειροκίνητο έλεγχο σε καλή μέρα και διαρρέει σε κακή. Γράψτε τις τρεις απαντήσεις δίπλα στο αρχείο compose, εκεί όπου θα κοιτάξει το επόμενο άτομο.

Ο διαμοιρασμός χώρου ονομάτων σημαίνει επίσης ότι η εφαρμογή κληρονομεί τον επιλυτή του κοντέινερ VPN, κάτι που βοηθά όταν η σήραγγα επιβάλλει διακομιστές DNS και μπερδεύει όταν δεν το κάνει. Ελέγξτε τι περιέχει πραγματικά ο χώρος ονομάτων αντί να υποθέτετε ότι ισχύει ο επιλυτής του κεντρικού υπολογιστή. Η αναφορά υπηρεσιών του Compose τεκμηριώνει το network_mode, το ports και τη συμπεριφορά εξαρτήσεων σε ένα σημείο, συμπεριλαμβανομένου του γιατί μια υπηρεσία network_mode δεν έχει δική της διεύθυνση.

Σχετικά άρθρα