繁体   English   中英

我可以仅将Docker端口公开给另一个Docker(而不是主机)吗?

[英]Can I expose a Docker port to another Docker only (and not the host)?

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

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

例如,如果您有一个运行postgreSQL db的泊坞窗容器:

$ 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/

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

例如,如果您打算将容器作为一个单元一起部署,则可以使它们全部共享相同的网络堆栈(使用--net container:oneOfThem )。 这样,您甚至不需要配置主机名就可以彼此查找主机名,它们可以共享相同的127.0.0.1而不会暴露给外部。

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

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

非常灵活的工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM