如何只在dockernetworking中公开端口?

我有几个应用程序在Dockernetworking中运行,其端口( 4200等)已经暴露。 我还有一个在同一个Dockernetworking中运行的nginx容器,在不同的域名( site1.comsite2.com )的端口80上托pipe这些应用程序。

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

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

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

那是因为你在docker run中使用-p aka --publish命令

说明:

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

例:

让我们创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这样的工具为你做。