Понимание портов и ссылок в docker compose

Насколько я понимаю docker compose/fig, создание ссылки между двумя службами/образами является одной из основных причин, если вы не хотите открывать порты другим.

как здесь db не предоставляет никаких портов и только связано:

web:
  build: .
  links:
   - db
  ports:
   - "8000:8000"   
db:
  image: postgres

Думает ли web, что db работает на своем локальном хосте? Могу ли я подключиться из сценария/программы в web к localhost: 5432 (стандартный порт из postgresql), чтобы получить соединение с базой данных?

И если это правильно, как вы можете изменить порт 5432 на 6432, не раскрывая? могу ли я просто запустить postgresql на другом порту?

Обновлять:

полезные ссылки после некоторого ввода:

http://docs.docker.com/userguide/dockerlinks/

https://docs.docker.com/compose/yml/#links


person svenhornberg    schedule 10.04.2015    source источник


Ответы (2)


web считает, что db работает на хосте, на который указывает переменная env DOCKER_DB или что-то в этом роде. Ваши службы должны указывать на эту переменную (хост), а не на локальный хост.

Контейнер db предоставляет порты (через EXPOSE) для своих связанных контейнеров, опять же в переменных. Вы можете запускать базу данных на любом порту, если он открыт.

person seanmcl    schedule 10.04.2015

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

Чтобы полностью понять ссылки между контейнерами, вы должны знать, что создается запись хоста, обычно внутри файла /etc/hosts, которая сопоставляет имя хоста этого контейнера в сети, управляемой докером, с определенным IP-адресом. Поэтому, если вы хотите получить доступ к базе данных postgres, вам нужно указать имя хоста db вместо localhost.

Что касается открытых портов, у большинства образов уже есть некоторые открытые порты, поэтому может случиться так, что вы просто используете образ, и этот порт открыт, вы всегда можете переопределить его на что-то другое.

Обновление в Docker Compose 1.6.0+

По умолчанию Compose устанавливает единую сеть для вашего приложения. Каждый контейнер для службы присоединяется к сети по умолчанию и доступен другим контейнерам в этой сети, а также может быть обнаружен ими по имени хоста, идентичному имени контейнера. источник

Вы можете определить ссылки между контейнерами только тогда, когда вы хотите определить псевдоним для контейнера, например:

version: '2'
services:
  web:
    build: .
    links:
      - "db:database"
  db:
    image: postgres
person Patryk    schedule 10.04.2015