如何仅在docker网络中公开端口?

时间:2017-03-11 04:20:07

标签: nginx docker

我在Docker网络中运行了一些应用程序,其端口(30004200等)已公开。我还有一个在同一个Docker网络中运行的nginx容器,它在端口80上托管这些具有不同域名(site1.comsite2.com)的应用程序。

但是现在如果我直接进入应用程序正在运行的端口(localhost:3000),我也可以这样访问它们。

如何仅将这些端口暴露给nginx容器而不是主机系统?

2 个答案:

答案 0 :(得分:6)

  

但是现在如果我直接进入应用程序正在运行的端口   (localhost:3000)我也可以这样访问它们。

这是因为您在-p

中使用了--publish又名docker run命令

<强>解释

如果您只想在容器之间公开端口,请不要使用-p--publish将它们放在同一个docker网络上。

示例:

让我们创建一个新的用户定义网络:

sudo docker network create appnet

让我们为反向代理创建nginx容器,它应该对外界可用,所以我们使用发布。

sudo docker run --name nginx -d --network appnet nginx

现在将您的应用放在同一个网络中,但不要公开端口。

sudo docker run --name app1 -d --network appnet <app image name/id>

答案 1 :(得分:2)

您必须使用Docker networks

默认网络与主机共享,因此可从localhost访问。您可以配置Docker,手动创建网络,也可以让docker-compose或Kubernetes等工具为您完成。