我正在使用 tutum 部署涉及 web 和 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/
由于 web 有一个到 DB 的链接,我期望“db”主机详细信息被添加到 web 容器的 /etc/hosts 文件中,但我没有看到任何内容。
在 Web 容器中
# 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
在 DB 容器中
# 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
因此,来自 Web 容器的数据库连接失败。
答案1
根据https://support.tutum.co/support/solutions/articles/5000012181-service-links, “Tutum 维护一个 DNS 服务,所有容器都会自动使用该服务来解析主机名,如本文档所述”。据推测,这是为了替代 hosts 文件安排,因为这可能使 tutum 更难动态操作。也就是说,DNS 可以在一个中心点更新,而无需重新启动所有引用它的容器。
您还可以使用环境变量来定位链接的服务,但请注意http://docs.docker.com/userguide/dockerlinks/建议不要依赖这些来在容器重启时进行更新。