Согласно документации файла Docker Compose :
depends_on
- Выразить зависимость между сервисами.links
- Связывать с контейнерами в другом сервисе, а также выражать зависимость между сервисами таким же образом, как depen_on .
Я не понимаю цели связывания с другими контейнерами, поэтому разница между двумя вариантами все еще кажется мне довольно сложной.
Было бы намного проще, если бы был пример, но я не могу его найти.
Я заметил, что когда я связываю контейнер B с контейнером A, тогда контейнер B будет «пингуемым» внутри оболочки контейнера A.
Я побежал ping B
в контейнер А bash
и получил такой результат (просто для справки, изображение из Интернета)
docker
docker-compose
dockerfile
itsjef
источник
источник
--link
флаг теперь является устаревшей функцией Docker, и в документации предлагается «Он может быть в конечном итоге удален» Docker: ссылки на устаревшие контейнеры . Рекомендуется не использовать функцию сетей Docker или метод создания Docker . Я подумал, что это будет полезно всем, кто узнает об этой функции.Ответы:
Сообщение нуждается в обновлении после того, как
links
опция устарела.По сути,
links
больше не требуется, потому что его основное назначение - сделать контейнер доступным для другого путем добавления переменной окружения, неявно включено вnetwork
. Когда контейнеры размещаются в одной и той же сети, они доступны друг другу, используя имя контейнера и другой псевдоним в качестве хоста.For
docker run
,--link
также является устаревшим и должен быть заменен пользовательской сетью.depends_on
выражает начальный порядок (и неявно порядок вытягивания изображения), что было хорошим побочным эффектомlinks
.источник
Этот ответ предназначен для docker-compose версии 2, а также для версии 3
Вы по-прежнему можете получить доступ к данным, когда вы используете зависимость_.
Если вы посмотрите на документы Docker Docker Compose и Django , вы все равно можете получить доступ к базе данных следующим образом:
В чем разница между ссылками и зависимости_?
ссылки по теме:
Когда вы создаете контейнер для базы данных, например:
И вы можете найти
Это означает, что вы можете подключить базу данных через локальный порт 32777 (3306 в контейнере), но этот порт будет меняться при каждом перезапуске или удалении контейнера. Таким образом, вы можете использовать ссылки, чтобы убедиться, что вы всегда будете подключаться к базе данных и не должны знать, какой это порт.
зависит от:
Я нашел хороший блог от Джорджио Феррари Docker-compose.yml: от V1 до V2
И
Обновить
зависит от
Экспресс-зависимость между сервисами, которая имеет два эффекта:
docker-compose up
запустит службы в порядке зависимости. В следующем примере db и redis будут запущены перед web.docker-compose up SERVICE
будет автоматически включать зависимости SERVICE. В следующем примере docker-compose up web также создаст и запустит db и redis.Простой пример:
источник
https://docs.docker.com/compose/compose-file/compose-versioning/
docker run
здесь пример совершенно не имеет значения, так или иначе контейнер будет работать не так. Чего мне не хватает?docker run
примере я хочу указать, почему нам нужно использовать номер_связи или ссылки вместо жесткого кода номера порта. Просто потому, что если вы не укажете его, он будет меняться каждый раз. Я думаю, что это позволит людям понять больше о зависящих от них ссылках.[Обновление сентября 2016 года]: Этот ответ был предназначен для файла компоновки Docker v1 (как показано в примере файла компоновки ниже). Для v2 см. Другой ответ @Windsooon.
[Оригинальный ответ]:
Это довольно ясно в документации.
depends_on
решает зависимость и порядок создания контейнера иlinks
не только делает это, но иНапример, предположим, что следующий
docker-compose.yml
файл:С помощью
links
кода внутриweb
можно будет получить доступ к базе данных, используяdb:5432
порт 5432 вdb
образе. Если быdepends_on
они использовались, это было бы невозможно, но порядок запуска контейнеров был бы правильным.источник
links
илиdepends_on
или любой из них в порядке? Мое текущееdocker-compose.yml
использованиеdepends_on
и вещи, кажется, работают нормально. :)name:port
тогдаdepends_on
все в порядке.db
вweb
базе данных, используя имя хоста