Этот ответ предназначен для docker-compose версии 2, а также для версии 3
Вы по-прежнему можете получить доступ к данным, когда вы используете зависимость_.
Если вы посмотрите на документы Docker 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"
Это означает, что вы можете подключить базу данных через локальный порт 32777 (3306 в контейнере), но этот порт будет меняться при каждом перезапуске или удалении контейнера. Таким образом, вы можете использовать ссылки, чтобы убедиться, что вы всегда будете подключаться к базе данных и не должны знать, какой это порт.
web:
links:
- db
зависит от:
Я нашел хороший блог от Джорджио Феррари Docker-compose.yml: от V1 до V2
Когда docker-compose выполняет файлы V2, он автоматически создает сеть между всеми контейнерами, определенными в файле, и каждый контейнер сразу же может ссылаться на другие, просто используя имена, определенные в файле docker-compose.yml.
И
Поэтому нам больше не нужны ссылки; ссылки использовались для запуска сетевого взаимодействия между нашим контейнером db и нашим контейнером веб-сервера, но это уже сделано docker-compose
Обновить
Экспресс-зависимость между сервисами, которая имеет два эффекта:
docker-compose up
запустит службы в порядке зависимости. В следующем примере db и redis будут запущены перед web.
docker-compose up SERVICE
будет автоматически включать зависимости SERVICE. В следующем примере docker-compose up web также создаст и запустит db и redis.
Простой пример:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Примечание: depen_on не будет ждать, пока db и redis будут «готовы» перед запуском web - только до тех пор, пока они не будут запущены. Если вам нужно дождаться готовности службы, см. «Управление порядком запуска» для получения дополнительной информации об этой проблеме и стратегиях ее решения.
--link
флаг теперь является устаревшей функцией Docker, и в документации предлагается «Он может быть в конечном итоге удален» Docker: ссылки на устаревшие контейнеры . Рекомендуется не использовать функцию сетей Docker или метод создания Docker . Я подумал, что это будет полезно всем, кто узнает об этой функции.