[英]How can I expose a Docker container port only to localhost so that it is also accessible via an ssh tunnel?
[英]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文档中找到更多详细信息:
我找到了容器链接的替代方法:您可以定义自定义“网络”,并使用--net
选项告诉容器使用它们。
例如,如果您打算将容器作为一个单元一起部署,则可以使它们全部共享相同的网络堆栈(使用--net container:oneOfThem
)。 这样,您甚至不需要配置主机名就可以彼此查找主机名,它们可以共享相同的127.0.0.1
而不会暴露给外部。
当然,通过这种方式,它们会将所有端口公开给彼此,并且您必须注意不要发生冲突(例如,它们不能同时运行8080)。 如果这是一个问题,您仍然可以使用--net
,而不是共享同一网络堆栈,而是建立一个更复杂的覆盖网络。
最后,-- --net
选项还可以用于使容器直接在主机的网络上运行。
非常灵活的工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.