यह उत्तर docker-compose संस्करण 2 के लिए है और यह संस्करण 3 पर भी काम करता है
जब आप depend_on का उपयोग करते हैं तब भी आप डेटा तक पहुँच सकते हैं।
यदि आप डॉक डॉक्स डॉकर कम्पोज़ और Django को देखते हैं , तो भी आप इस तरह से डेटाबेस तक पहुँच सकते हैं:
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
लिंक और depend_on के बीच क्या अंतर है?
लिंक:
जब आप डेटाबेस के लिए एक कंटेनर बनाते हैं, उदाहरण के लिए:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
और आप पा सकते हैं
"HostPort": "32777"
इसका मतलब है कि आप डेटाबेस को अपने लोकलहोस्ट पोर्ट 32777 (कंटेनर में 3306) से कनेक्ट कर सकते हैं लेकिन यह पोर्ट हर बार आपके द्वारा कंटेनर को पुनरारंभ करने या निकालने पर बदल जाएगा। इसलिए आप यह सुनिश्चित करने के लिए लिंक का उपयोग कर सकते हैं कि आप हमेशा डेटाबेस से जुड़ेंगे और यह नहीं जान पाएंगे कि यह कौन सा पोर्ट है।
web:
links:
- db
निर्भर करता है:
मुझे Giorgio Ferraris Docker-compose.yml: V1 से V2 तक एक अच्छा ब्लॉग मिला
जब docker-compose V2 फ़ाइलों को निष्पादित करता है, तो यह स्वचालित रूप से फ़ाइल में परिभाषित सभी कंटेनरों के बीच एक नेटवर्क का निर्माण करेगा, और प्रत्येक कंटेनर तुरंत docker-compose.yml फ़ाइल में परिभाषित नामों का उपयोग करके दूसरों को संदर्भित करने में सक्षम होगा।
तथा
इसलिए हमें अब लिंक की आवश्यकता नहीं है; हमारे db कंटेनर और हमारे वेब-सर्वर कंटेनर के बीच नेटवर्क संचार शुरू करने के लिए लिंक का उपयोग किया गया था, लेकिन यह पहले से ही docker-compose द्वारा किया गया है
अपडेट करें
सेवाओं के बीच एक्सप्रेस निर्भरता, जिसके दो प्रभाव हैं:
docker-compose up
निर्भरता क्रम में सेवाएं शुरू करेंगे। निम्नलिखित उदाहरण में, db और redis वेब से पहले शुरू किया जाएगा।
docker-compose up SERVICE
स्वचालित रूप से सेवा की निर्भरता शामिल करेगा। निम्नलिखित उदाहरण में, docker-compose up web भी db और redis बनाएंगे और शुरू करेंगे।
सरल उदाहरण:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
नोट: depend_on वेब शुरू करने से पहले db और redis के लिए "तैयार" होने का इंतजार नहीं करेगा - केवल तब तक जब तक कि उन्हें शुरू नहीं किया गया हो। यदि आपको किसी सेवा के तैयार होने की प्रतीक्षा करने की आवश्यकता है, तो इस समस्या के लिए स्टार्टअप आदेश को नियंत्रित करने और इसे हल करने के लिए रणनीतियों को देखें।
--link
झंडा अब डोकर की एक पदावनत विरासत सुविधा है और प्रलेखन पता चलता है "यह अंत में हटाया जा सकता है" डोकर: विरासत कंटेनर लिंक । यह सुझाव दिया जाता है कि डॉकर नेटवर्क सुविधा या डॉक कम्पोज़ विधि का उपयोग न करें । मुझे लगा कि इस सुविधा के बारे में जानने के लिए यह किसी के लिए भी उपयोगी होगा।