我可以只暴露一个Docker端口到另一个Docker(而不是主机)?

是否有可能暴露一个端口从一个Docker容器到另一个(或几个其他的),而不暴露给主机?

是的,您可以将容器链接在一起,并且端口仅暴露于这些链接的容器,而不必将端口导出到主机。

例如,如果你有一个运行postgreSQL db的docker容器:

$ docker run -d --name db training/postgres 

您可以链接到运行您的Web应用程序的另一个容器:

 $ docker run -d --name web --link db training/webapp python app.py 

运行您的Web应用程序的容器将具有一组环境variables,并在db容器中显示端口,例如:

 DB_PORT_5432_TCP_PORT=5432 

环境variables是基于容器名称创build的,在这种情况下,容器名称是db,所以环境variables以DB开头。

你可以在这里finddocker文档中的更多细节:

https://docs.docker.com/v1.8/userguide/dockerlinks/

我find了一个容器链接的替代方法:你可以定义自定义的“networking”,并告诉容器使用--net选项来使用它们。

例如,如果您的容器是作为一个单元一起部署的,您可以让它们共享相同的networking堆栈(使用--net container:oneOfThem )。 这样,你甚至不需要configuration主机名来让他们find对方,他们可以共享相同的127.0.0.1 ,没有任何东西暴露在外面。

当然,这样他们将所有的端口都暴露给对方,并且你必须小心不要有冲突(例如它们不能同时运行8080)。 如果这是一个问题,你仍然可以使用--net ,而不是共享相同的networking堆栈,而是build立一个更复杂的覆盖networking。

最后,还可以使用--net选项使容器直接在主机的networking上运行。

非常灵活的工具。