如何从主机外部(同一网络)连接到Docker容器[Windows]

红盐

我已经创建了我的第一个Docker容器,它使用Go运行服务器,但是无法从主机外部访问它。我刚开始使用docker,所以在这里有点迷路了。

因此,我有一个非常简单的Go代码来启动服务器,我已经构建了Docker映像,该映像安装了Go并在Linux基本映像中构建了代码。我在端口8080上运行服务器,因此我将该端口公开给运行容器的主机,如下所示:

docker run -p 8080:8080 dockertest

那行得通,我可以通过Docker的机器IP启动出现在Docker Quickstart Terminal的机器IP)访问服务器,问题是我无法从主机外部访问我托管的网站,所以如果我尝试在手机上打开相同的IP地址,只会给我一个错误:该网页不可用(ERR_CONNECTION_TIMED_OUT)。

我也尝试过这样指定IP:

docker run -p 192.168.0.157:8080:8080 dockertest

但是当我这样做时,我既不能通过docker机器的IP也不能通过上面的命令行中的指定IP来访问网站。我也不确定我应该使用该计算机的IP在该命令中写入哪个IP,我也尝试了127.0.0.1(localhost),但结果却是相同的:无法通过任何方式访问该网站IP。

我已经搜索了这个问题,发现了很多StackOverflow问题,但都没有帮助我解决问题,大多数问题都针对Linux或Mac,因此该解决方案不适用于我的情况。

另外,我可以在计算机上运行Go代码,并通过计算机的IP从同一网络中的另一台设备访问网站。我不明白为什么在docker机器上运行它时无法访问它,我想到它可能与IP转发有关,但我是一个完全的网络专家,我我主要是一名Web开发人员,几乎没有本地经验。

克里滕

TL; DR检查VirtualBox主机的网络模式-是否应该bridged在本地网络上访问虚拟机(及其托管的Docker容器)。


听起来您的困惑在于连接到哪个主机以便通过HTTP访问您的应用程序。您还没有真正弄清楚您的配置是什么-我将基于您的标记中包含“ Windows”和“ VirtualBox”的事实做出一些猜测。

我猜您在Windows主机上的VirtualBox中运行的某种Linux操作系统上运行了Docker。我将如下标记IP地址:

D = Docker容器的IP地址

L =在VirtualBox中运行的Linux主机的IP地址

W = Windows主机的IP地址

在Windows主机上运行Go应用程序时,可以http://W:8080/从本地网络上的任何位置连接到该应用程序之所以可行,是因为Go应用程序绑定了Windows计算机上的端口8080,并且任何尝试访问IP地址上的端口8080的人都W将建立连接。

这就是它变得更加复杂的地方:

VirtualBox设置虚拟机(VM)时,可以以几种不同模式之一配置网络。我不记得所有不同的选项是什么,但是您想要的是bridged在这种模式下,VirtualBox会将虚拟机连接到本地网络,就像虚拟机是网络上的独立计算机一样,就像插入到网络中的任何其他计算机一样。bridged模式下,虚拟机会像其他任何计算机一样出现在您的网络上。其他模式设置的方式有所不同,并且计算机将在您的网络上不可见。

因此,假设您为Linux主机(bridged正确设置了网络连接,则Linux主机将在您的本地网络上拥有一个IP地址(例如192.168.0.x之类),并且您可以在处访问Docker容器http://L:8080/

如果Linux主机设置为以外的其他模式bridged,则可以从Windows主机访问,但这将取决于它所处的模式。

编辑-根据以下评论,听起来非常像我上面描述的情况是正确的。

让我们做些备份:这是Docker在我的计算机(Ubuntu Linux)上的工作方式。

假设我运行与您相同的命令:docker run -p 8080:8080 dockertest这样做是根据dockertest映像启动一个新容器,并将Linux主机(我的PC)上的端口8080转发(连接)到容器上的端口8080。Docker设置了自己的内部网络(具有自己的IP地址集),以允许Docker守护进程进行通信并允许容器相互通信。因此,基本上,您要做的-p 8080:8080就是将Docker的内部网络与“外部”网络连接-即。主机的网络适配器-在特定端口上。

到目前为止和我在一起?好的,现在让我们退后一步,看看您的系统。您的计算机正在运行Windows-Docker(当前)不在Windows上运行,因此您使用的工具已在VirtualBox虚拟机中设置了Linux主机。当你做docker run你的环境,同样的事情发生了- 8080端口在Linux主机上连接到端口8080的容器上。这里最大的区别是您的Windows主机不是运行容器的Linux主机,因此这里还有另一层,并且跨该层的通信会遇到问题。

您需要做的是以下两件事之一:

  1. 将VirtualBox VM上的端口8080连接到Windows主机上的端口8080,就像将Docker容器连接到主机端口一样。

  2. 使用上述bridged网络模式将VirtualBox VM直接连接到本地网络

如果您选择第一个选项,则可以访问Windows主机的IP地址或主机名http://W:8080所在的容器W如果选择第二个,则可以访问Linux VM的IP地址或主机名http://L:8080所在的容器L

这就是所有更高层次的说明-现在您需要弄清楚如何更改VirtualBox VM的配置。这是我无法真正为您提供帮助的地方-我不知道您在Windows机器上使用什么工具来完成所有这些工作,而且我对在Windows上使用Docker一点也不熟悉。

如果可以进入VirtualBox配置窗口,则可以进行以下描述的更改。还有一个命令行客户端将修改VM,但是我对此并不熟悉。

对于bridged模式(这确实是最简单的选择),请关闭您的VM,单击顶部的“设置”按钮bridged,然后将网络模式更改为,然后重新启动VM,您就可以了。VM应该通过DHCP在本地网络上选择一个IP地址,并且对于该IP地址在网络上的其他计算机应该是可见的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从与Docker主机位于同一网络的设备访问Docker容器?

来自分类Dev

将Docker容器与Azure管道中的当前容器连接到同一网络

来自分类Dev

无法通过wifi连接到同一网络的设备访问本地主机

来自分类Dev

连接到同一VPN是否意味着连接到同一网络?

来自分类Dev

无法通过以太网和无线连接到同一网络

来自分类Dev

ASP.NET Core Web API服务无法连接到同一网络上的Docker SQL Server

来自分类Dev

同一网络中多主机中的docker网络

来自分类Dev

docker容器无法与同一网络上的其他容器通信

来自分类Dev

如何从同一网络上的另一台设备连接到localhost:8888?

来自分类Dev

如何防止同一网络上的其他主机切断我的Internet连接?

来自分类Dev

如何防止同一网络上的其他主机切断我的Internet连接?

来自分类Dev

如何通过主机名访问同一网络中的主机?

来自分类Dev

当机器通过两个接口连接到同一网络时,如何分配IP?

来自分类Dev

从同一网络上的其他设备连接到Flask Server

来自分类Dev

python连接到同一网络上的服务器

来自分类Dev

我无法连接到同一网络内的其他机器

来自分类Dev

同一网络中的Docker容器无法通信

来自分类Dev

同一网络中的Docker容器无法相互通信

来自分类Dev

访问由 docker-compose 在同一网络中创建的容器

来自分类Dev

将Windows Winform App与同一网络上的Android平板电脑连接

来自分类Dev

可以将Wi-Fi和以太网连接到同一网络吗?

来自分类Dev

通过SSH连接到同一网络上的多个客户端之一

来自分类Dev

通过同一网络上的多台计算机连接到ubuntu runnning rmate

来自分类Dev

如何在PF意义上使用具有不同子网的IP连接到同一网络

来自分类Dev

如何从同一网络连接到路由器后面的交换机后面的计算机?

来自分类Dev

Node + Flask服务器Docker容器无法通过同一网络进行通信

来自分类Dev

使用docker-compose无法在同一网络中连接mysql和spring boot

来自分类Dev

如何使两个接口在同一网络中使用同一网关?

来自分类Dev

DNS无法仅从外部在同一网络上解析-已经头痛3天了

Related 相关文章

  1. 1

    如何从与Docker主机位于同一网络的设备访问Docker容器?

  2. 2

    将Docker容器与Azure管道中的当前容器连接到同一网络

  3. 3

    无法通过wifi连接到同一网络的设备访问本地主机

  4. 4

    连接到同一VPN是否意味着连接到同一网络?

  5. 5

    无法通过以太网和无线连接到同一网络

  6. 6

    ASP.NET Core Web API服务无法连接到同一网络上的Docker SQL Server

  7. 7

    同一网络中多主机中的docker网络

  8. 8

    docker容器无法与同一网络上的其他容器通信

  9. 9

    如何从同一网络上的另一台设备连接到localhost:8888?

  10. 10

    如何防止同一网络上的其他主机切断我的Internet连接?

  11. 11

    如何防止同一网络上的其他主机切断我的Internet连接?

  12. 12

    如何通过主机名访问同一网络中的主机?

  13. 13

    当机器通过两个接口连接到同一网络时,如何分配IP?

  14. 14

    从同一网络上的其他设备连接到Flask Server

  15. 15

    python连接到同一网络上的服务器

  16. 16

    我无法连接到同一网络内的其他机器

  17. 17

    同一网络中的Docker容器无法通信

  18. 18

    同一网络中的Docker容器无法相互通信

  19. 19

    访问由 docker-compose 在同一网络中创建的容器

  20. 20

    将Windows Winform App与同一网络上的Android平板电脑连接

  21. 21

    可以将Wi-Fi和以太网连接到同一网络吗?

  22. 22

    通过SSH连接到同一网络上的多个客户端之一

  23. 23

    通过同一网络上的多台计算机连接到ubuntu runnning rmate

  24. 24

    如何在PF意义上使用具有不同子网的IP连接到同一网络

  25. 25

    如何从同一网络连接到路由器后面的交换机后面的计算机?

  26. 26

    Node + Flask服务器Docker容器无法通过同一网络进行通信

  27. 27

    使用docker-compose无法在同一网络中连接mysql和spring boot

  28. 28

    如何使两个接口在同一网络中使用同一网关?

  29. 29

    DNS无法仅从外部在同一网络上解析-已经头痛3天了

热门标签

归档