我可以只暴露一个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文档中的更多细节:
我find了一个容器链接的替代方法:你可以定义自定义的“networking”,并告诉容器使用--net
选项来使用它们。
例如,如果您的容器是作为一个单元一起部署的,您可以让它们共享相同的networking堆栈(使用--net container:oneOfThem
)。 这样,你甚至不需要configuration主机名来让他们find对方,他们可以共享相同的127.0.0.1
,没有任何东西暴露在外面。
当然,这样他们将所有的端口都暴露给对方,并且你必须小心不要有冲突(例如它们不能同时运行8080)。 如果这是一个问题,你仍然可以使用--net
,而不是共享相同的networking堆栈,而是build立一个更复杂的覆盖networking。
最后,还可以使用--net
选项使容器直接在主机的networking上运行。
非常灵活的工具。