คำตอบนี้มีไว้สำหรับนักเทียบท่าเขียนรุ่น 2และยังใช้งานได้กับรุ่น 3
คุณยังสามารถเข้าถึงข้อมูลได้เมื่อคุณใช้ depend_on
ถ้าคุณดูที่ docker docs Docker Compose และ 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
อะไรคือความแตกต่างระหว่างลิงค์และ dependent_on?
ลิงค์:
เมื่อคุณสร้างคอนเทนเนอร์สำหรับฐานข้อมูลตัวอย่างเช่น:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
และคุณอาจพบว่า
"HostPort": "32777"
ซึ่งหมายความว่าคุณสามารถเชื่อมต่อฐานข้อมูลจากพอร์ต localhost 32777 (3306 ในคอนเทนเนอร์) แต่พอร์ตนี้จะเปลี่ยนทุกครั้งที่คุณรีสตาร์ทหรือลบคอนเทนเนอร์ ดังนั้นคุณสามารถใช้ลิงก์เพื่อให้แน่ใจว่าคุณจะเชื่อมต่อกับฐานข้อมูลเสมอและไม่จำเป็นต้องรู้ว่ามันคือพอร์ตใด
web:
links:
- db
ขึ้นอยู่กับ:
ฉันพบบล็อกที่ดีจาก Giorgio Ferraris Docker-compose.yml: จาก V1 ถึง V2
เมื่อนักเทียบท่าเขียนไฟล์ V2 มันจะสร้างเครือข่ายโดยอัตโนมัติระหว่างคอนเทนเนอร์ทั้งหมดที่กำหนดไว้ในไฟล์และทุกคอนเทนเนอร์จะสามารถอ้างถึงไฟล์อื่น ๆ ได้ทันทีโดยใช้ชื่อที่กำหนดไว้ในไฟล์ docker-compose.yml
และ
ดังนั้นเราไม่ต้องการลิงก์อีกต่อไป ลิงค์ถูกใช้เพื่อเริ่มการสื่อสารเครือข่ายระหว่างคอนเทนเนอร์ db ของเรากับคอนเทนเนอร์เว็บเซิร์ฟเวอร์ของเรา แต่สิ่งนี้ได้ทำไปแล้วโดยนักเขียน
ปรับปรุง
แสดงการพึ่งพาระหว่างบริการซึ่งมีสองลักษณะพิเศษ:
docker-compose up
จะเริ่มให้บริการตามลำดับการพึ่งพา ในตัวอย่างต่อไปนี้ db และ redis จะเริ่มต้นก่อนเว็บ
docker-compose up SERVICE
จะรวมการขึ้นต่อกันของ SERVICE โดยอัตโนมัติ ในตัวอย่างต่อไปนี้เว็บประกอบนักเทียบท่าจะสร้างและเริ่มต้น db และ redis
ตัวอย่างง่ายๆ:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
หมายเหตุ: depend_on จะไม่รอให้ db และ redis เป็น“ พร้อม” ก่อนเริ่มต้นเว็บ - จนกว่าจะเริ่มต้นเท่านั้น หากคุณต้องรอให้บริการพร้อมให้ดูการควบคุมคำสั่งเริ่มต้นสำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้และกลยุทธ์ในการแก้ไข
--link
ธงตอนนี้เป็นคุณลักษณะมรดกเลิกของหางและเอกสารที่แสดงให้เห็น "มันอาจจะถูกลบออกในที่สุด" หาง: การเชื่อมโยงภาชนะมรดก แนะนำให้ใช้คุณสมบัติเครือข่าย DockerหรือวิธีการเขียนDocker ฉันคิดว่านี่จะเป็นประโยชน์กับทุกคนที่เรียนรู้เกี่ยวกับคุณลักษณะนี้