我是否可以将Docker端口仅暴露给另一个Docker(而不是主机)?

时间:2015-12-09 13:59:11

标签: networking docker

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

2 个答案:

答案 0 :(得分:3)

是的,您可以将容器链接在一起,只为这些链接容器公开端口,而无需将端口导出到主机。

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

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

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

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

运行Web应用程序的容器将具有一组环境变量,其中端口在db容器中公开,例如:

DB_PORT_5432_TCP_PORT=5432

环境变量是根据容器名称创建的,在这种情况下容器名称是db,因此环境变量以DB开头。

您可以在此处找到docker文档中的更多详细信息:

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

答案 1 :(得分:1)

我找到了容器链接的替代方法:您可以定义自定义“网络”并告诉容器使用--net选项来使用它们。

例如,如果您的容器无论如何都要作为一个单元一起部署,您可以让它们共享相同的网络堆栈(使用--net container:oneOfThem)。这样你甚至不需要配置主机名让他们找到彼此,他们只能共享相同的127.0.0.1并且没有任何东西暴露给外部。

当然,通过这种方式,他们将所有端口暴露给彼此,并且必须注意不要有冲突(例如,他们不能同时运行8080)。如果这是一个问题,您仍然可以使用--net,只是不要共享相同的网络堆栈,而是设置更复杂的覆盖网络。

最后,--net选项也可用于让容器直接在主机网络上运行。

非常灵活的工具。