我是 Docker 的初学者。我在 docker run 命令中找不到任何关于此选项的明确描述,对此我感到有些困惑。
我们可以使用它来访问在 docker 容器上运行的应用程序而不指定端口吗?例如,如果我在 docker run 命令中使用选项 -p 8080:8080
运行通过端口 8080 中的 docker 映像部署的 webapp,我知道我必须在 Docker 容器 ip /theWebAppName 的 8080 端口上访问它。但我真的想不出 --net=host
选项如何工作。
原文由 Ravindu Nirmal Fernando 发布,翻译遵循 CC BY-SA 4.0 许可协议
安装 docker 后,默认情况下您有 3 个网络:
我试图保持这个简单。因此,如果您默认启动一个容器,它将在桥 (docker0) 网络中创建。
在 jenkins 的 dockerfile 中,端口
8080
和50000
被暴露。这些端口在其桥接网络上为容器打开。因此,桥接网络内的所有内容都可以访问端口8080
和50000
上的容器。桥接网络中的所有内容都在"Subnet": "172.17.0.0/16",
的私有范围内,如果您想从外部访问它们,您必须使用-p 8080:8080
映射端口。这会将容器的端口映射到真实服务器(主机网络)的端口。因此,在8080
上访问您的服务器将路由到您在端口8080
上的桥接网络。现在你也有了你的主机网络。它不会容器化容器网络。因此,如果您在主机网络中启动一个容器,它将如下所示(这是第一个):
区别在于端口。您的容器现在位于您的主机网络中。因此,如果您在主机上打开端口
8080
您将立即访问容器。我已经在防火墙中打开了端口
8080
,当我现在在端口8080
我正在访问我的詹金斯。我认为 这个博客 也有助于更好地理解它。