Ця відповідь призначена для докер- версії 2, вона також працює у версії 3
Ви все одно можете отримати доступ до даних, коли використовуєте залежність_on.
Якщо ви подивитесь докерів 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
Яка різниця між посиланнями та залежними_ми?
посилання:
Наприклад, створюючи контейнер для бази даних, наприклад:
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
Коли docker-compose виконує файли V2, він автоматично створить мережу між усіма визначеними у файлі контейнерами, і кожен контейнер зможе негайно звернутися до інших, лише використовуючи імена, визначені у файлі docker-compose.yml.
І
Тому нам більше не потрібні посилання; посилання використовувались для встановлення мережевого зв'язку між нашим контейнером db та контейнером веб-сервера, але це вже зроблено docker-compose
Оновлення
Експресна залежність між службами, яка має два наслідки:
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
Примітка: ovis_on не буде чекати, коли db та redis будуть "готові" до запуску веб-сторінок - лише до їх запуску. Якщо вам потрібно дочекатися, коли послуга буде готова, див. Розділ "Контроль порядку запуску", щоб дізнатися більше про цю проблему та стратегії її вирішення.
--link
прапор є застарілою застарілою функцією Docker, а документація передбачає "Зрештою, його можна буде видалити" Docker: Legacy контейнерні посилання . Пропонується не використовувати функцію мереж Docker або метод компонування докера. Я вважав, що це буде корисно для всіх, хто тут дізнається про цю особливість.