我有一个简单的Web应用程序,该应用程序在端口5002上启动Web服务器。现在,我想对这个应用程序进行docker操作。但是我很困惑。我应该在dockerfile内提供暴露命令还是使用docker run命令提供端口,例如
docker run -p 4000:4000 myapp
如果执行此操作,我的应用程序现在正在监听哪个端口?我在Windows中使用docker工具箱。当我在工具箱中运行此命令时,应用程序说服务器现在正在prt 5002上运行。但是我现在如何到达此端口,因为有两个端口,例如4000和5002。
我是Docker的初学者。感谢您的帮助。
答案 0 :(得分:1)
您混淆了侦听和转发的概念。 Docker容器在单独的网络上运行,只有将其配置为主机,主机才能访问网络。
在容器中启动应用程序时,无论如何,它都会在端口5002
上进行监听。如果您将另一个容器连接到同一网络,则可以从另一个容器通过该端口5002
到达该端口。
端口转发可将主机中的哪些端口重定向到容器内的哪个端口。当您执行-p 4000:4000
时,它只是告诉您连接到主机上的4000
时要“连接”到容器内的端口4000
。
如果您需要连接到监听5002
的应用程序,但要求它是主机上的4000
,则必须执行-p 4000:5002
。
P.S。您应该费心接受问题的答案。它可以帮助社区和未来的Google员工了解答案是否有帮助。