是否可以将端口从一个Docker容器暴露给另一个(或其他几个)容器,而不将其暴露给主机?
答案 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文档中的更多详细信息:
答案 1 :(得分:1)
我找到了容器链接的替代方法:您可以定义自定义“网络”并告诉容器使用--net
选项来使用它们。
例如,如果您的容器无论如何都要作为一个单元一起部署,您可以让它们共享相同的网络堆栈(使用--net container:oneOfThem
)。这样你甚至不需要配置主机名让他们找到彼此,他们只能共享相同的127.0.0.1
并且没有任何东西暴露给外部。
当然,通过这种方式,他们将所有端口暴露给彼此,并且必须注意不要有冲突(例如,他们不能同时运行8080)。如果这是一个问题,您仍然可以使用--net
,只是不要共享相同的网络堆栈,而是设置更复杂的覆盖网络。
最后,--net
选项也可用于让容器直接在主机网络上运行。
非常灵活的工具。