network_mode: service:vpn ಮತ್ತು ಕಳೆದುಹೋದ db ಹೋಸ್ಟ್ ಹೆಸರು
VPN ನ ನಾಮಸ್ಥಳವನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದು ಟೋಪಾಲಜಿ ಆಯ್ಕೆ. ಒಂದೋ db ತನ್ನದೇ ವಿಳಾಸವನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು vpn ಆ ನೆಟ್ವರ್ಕ್ಗೆ ಸೇರುತ್ತದೆ, ಇಲ್ಲವೇ ಎಲ್ಲವೂ loopback ನಲ್ಲಿ ಉತ್ತರಿಸುತ್ತದೆ.
ನೀವು ಆ್ಯಪ್ಗೆ 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 ಸೇವೆಗೆ ತನ್ನದೇ ವಿಳಾಸ ಏಕೆ ಇಲ್ಲ ಎಂಬುದೂ ಸೇರಿದಂತೆ.