我在Docker网络中运行了一些应用程序,其端口(3000
,4200
等)已公开。我还有一个在同一个Docker网络中运行的nginx容器,它在端口80
上托管这些具有不同域名(site1.com
,site2.com
)的应用程序。
但是现在如果我直接进入应用程序正在运行的端口(localhost:3000
),我也可以这样访问它们。
如何仅将这些端口暴露给nginx容器而不是主机系统?
答案 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等工具为您完成。