Я использую tutum для развертывания приложения, которое включает веб-компоненты и компоненты db. Вот соответствующие части файла tutum.yml.
db:
image: 'postgres:latest'
ports:
- '5432:5432'
restart: always
volumes_from:
- data
web:
image: 'rchamarthi/djangoweb:latest'
command: 'bash -c ''python manage.py makemigrations && python manage.py migrate && /usr/local/bin/gunicorn django_project.wsgi:application -w 2 -b :8000'''
expose:
- '8000'
links:
- db
restart: always
volumes:
- /usr/src/app/static
working_dir: /usr/src/app/
Поскольку в Интернете есть ссылка на БД, я ожидаю, что сведения о хосте "db" будут добавлены в файл веб-контейнера / etc / hosts, но я ничего не вижу.
В веб-контейнере
# cat /etc/hosts
172.17.0.50 web-1
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
В контейнере БД
# cat /etc/hosts
172.17.0.49 db-1
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
В результате не удается подключиться к базе данных из веб-контейнера.
В соответствии с https://support.tutum.co/support/solutions/articles/5000012181-service-links, «Tutum поддерживает службу DNS, которая автоматически используется всеми контейнерами для разрешения имен хостов, как описано в этом документе». Предположительно, это вместо расположения файлов hosts, которым тутум может быть труднее динамически манипулировать. т.е. DNS можно обновлять в центральной точке без перезапуска всех контейнеров, которые к нему относятся.
У вас также будут переменные среды, которые вы можете использовать для поиска связанных служб, но обратите внимание, что http://docs.docker.com/userguide/dockerlinks/ рекомендует не использовать их для обновления при перезапуске контейнера.