Разница между ссылками и зависит от в docker compose.в формате YML



согласно Docker Compose compose-file documentation:





  • depends_on - выраженная зависимость между службами.


  • links - ссылка на контейнеры в другой сервис, а также выраженная зависимость между службами точно так же, как depends_on.


Я не понимаю цели привязки к другим контейнерам, поэтому разница между двумя вариантами все еще кажется довольно сложной для меня.



было бы намного проще, если бы был пример, но я не могу его найти.



Я заметил, когда я ссылку на контейнер б в контейнер, то контейнер б будут "обмениваться информацией" внутри контейнера в оболочке.



Я побежал ping B внутри контейнера, а bash и получил такой результат (просто для справки, изображение из интернета)



enter image description here

524   2  

2 ответов:

этот ответ для docker-compose вариант 2 и он также работает на вариант 3

вы все еще можете получить доступ к данным при использовании depends_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

в чем разница между links и depends_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

depends_on:

я нашел хороший блог Джорджио Феррарис Docker-compose.yml: от V1 до V2

когда docker-compose выполняет файлы V2, он автоматически создает сеть между всеми контейнерами, определенными в файле, и каждый контейнер сразу же сможет ссылаться на другие, просто используя имена, определенные в docker-compose.yml-файл.

и

так что нам больше не нужны ссылки; ссылки были использованы для запуска сетевой связи между нашим контейнером БД и нашим контейнером веб-сервера, но это уже сделано docker-compose

обновление

depends_on

выраженная зависимость между службами, которая имеет два эффекта:

  • docker-compose up запустит службы в порядке зависимости. В следующем примере db и redis будут запущены до web.
  • 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

Примечание: depends_on не будет ждать, пока db и redis будут "готовы" перед запуском веб - только до тех пор, пока они не будут запущены. Если вам нужно дождаться готовности службы, см. раздел Управление порядком запуска для получения дополнительной информации об этой проблеме и стратегиях ее решения.

[Update Sep 2016]: этот ответ был предназначен для docker compose file v1 (как показано в Примере compose file ниже). Для v2 см. другой ответ от @Windsooon.

[оригинальный ответ]:

это довольно ясно в документации. depends_on решает, зависимость и порядок создания контейнера и links не только это, но и

контейнеры для связанной службы будут доступны по адресу имя хоста, идентичное псевдониму, или имя службы, если псевдоним не указан.

например, предполагая следующее docker-compose.yml file:

web:
  image: example/my_web_app:latest
  links:
    - db
    - cache

db:
  image: postgres:latest

cache:
  image: redis:latest

С links, код внутри web будет иметь доступ к базе данных с помощью db:5432, предполагая, что порт 5432 открыт в db изображения. Если depends_on были использованы, это было бы невозможно, но порядок запуска контейнеров будет правильным.

    Ничего не найдено.

Добавить ответ:
Отменить.