如何只在dockernetworking中公开端口?
我有几个应用程序在Dockernetworking中运行,其端口( 4200
等)已经暴露。 我还有一个在同一个Dockernetworking中运行的nginx容器,在不同的域名( site1.com
, site2.com
)的端口80
上托pipe这些应用程序。
但现在如果我直接进入应用程序运行的端口( localhost:3000
),我也可以访问它们。
如何将这些端口仅暴露给nginx容器而不是主机系统?
但现在如果我直接进入应用程序运行的端口(localhost:3000),我也可以访问它们。
那是因为你在docker run
中使用-p
aka --publish
命令
说明:
如果只想在容器之间公开端口,请不要使用-p
或--publish
将它们放在同一个--publish
networking上。
例:
让我们创build一个新的用户定义的networking:
sudo docker network create appnet
让我们为反向代理创buildnginx容器,它应该可用于外部世界,所以我们使用发布。
sudo docker run --name nginx -d --network appnet nginx
现在把你的应用程序放在同一个networking上,但是不要暴露端口。
sudo docker run --name app1 -d --network appnet <app image name/id>
你必须使用Docker networking 。
默认networking与主机共享,因此可以从本地主机访问。 你可以configurationDocker,手动创build一个networking,或者让像docker-compose或者Kubernetes这样的工具为你做。