了解Docker撰写的端口和链接
从我对Docker组合/无花果的理解来看,如果你不想把端口暴露给其他人,那么在两个服务/图像之间创build一个链接是一个主要原因。
像这里db不暴露任何端口,只是连接:
web: build: . links: - db ports: - "8000:8000" db: image: postgres
Web认为数据库在本地主机上运行? 我将从Web脚本/程序连接到localhost:5432(从postgresql的标准端口)来获得数据库连接?
如果这是正确的,你怎么能改变端口5432到6432,而不暴露? 我只是在不同的端口上运行postgresql?
更新:
一些input后有用的链接:
http://docs.docker.com/userguide/dockerlinks/
https://docs.docker.com/compose/yml/#links
Web认为数据库运行在由envvariablesDOCKER_DB指向的主机或类似的东西。 你的服务应该指向那个variables(主机),而不是本地主机。
数据库容器暴露端口(通过EXPOSE)到其链接的容器,再次在variables。 只要是EXPOSEd,你可以在任何你想要的端口上运行数据库。
docker-compose
/ fig
主要是一个立即启动/pipe理多个图像的主力,它们在某种程度上相互依赖。
要充分理解容器之间的链接 ,您应该知道创build了一个主机条目,通常位于/etc/hosts
文件中,该文件将docker托pipenetworking中的容器主机名映射到特定的IP地址。 所以如果你想访问postgres数据库,你必须指向db
主机名而不是localhost
。
对于暴露的端口,大多数图像已经暴露了一些端口,所以可能是这种情况,你只是使用一个图像,该端口是暴露的,你总是可以重写它的东西。
Docker Compose 1.6.0+更新
默认情况下,Compose会为您的应用程序设置一个networking。 服务的每个容器都join默认networking,并且该networking上的其他容器都可以访问它们,并且可以通过与容器名称相同的主机名来发现它们。 资源
只有当你想为一个容器定义一个别名时,你才可以定义容器之间的链接,如下所示:
version: '2' services: web: build: . links: - "db:database" db: image: postgres