了解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