当前位置: 首页 > 面试题库 >

如何使网络上的其他计算机访问我的Docker容器(使用端口映射)?

西门梓
2023-03-14
问题内容

我有在OS X(VirtualBox驱动程序)上运行的最新Docker Toolbox
RC

Docker主机的IP为:

$ docker-machine ip
192.168.99.100

我正在运行这样的容器:

$ docker run -ti -p 4505:4505 my_image /bin/bash
[root@blah /]#

我试图检查我是否可以从网络上运行Windows 10的另一台完全不同的计算机上访问此端口:

$ nmap -p 4505 192.168.99.100

Starting Nmap 7.01 ( https://nmap.org ) at 2016-02-04 17:18 W. Europe Standard Time
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.74 seconds

如何使容器和网络上的其他计算机互相看到?

编辑:
下面接受的答案可以通过物理机的IP地址访问指定端口上的容器。也就是说,您不能通过访问容器192.168.99.100:4505。而是可以通过计算机的进行访问<IP>:4505


问题答案:

如果您将VirtualBox驱动程序与docker-machine一起使用以在Mac上运行Docker VM,则可以将端口从Mac转发到VM,如下所示:

VBoxManage controlvm myvirtualmachine natpf1 'myapp,tcp,,4505,,4505'

让我们分解一下:

  • VBoxManage 是控制VirtualBox的可执行文件的名称。
  • controlvm 告诉VirtualBox,您是在告诉VM(而不是VM管理器)做某事。
  • myvirtualmachine 是您的Docker VM的名称(您可以通过运行来找到它docker-machine ls)。
  • natpf1 告诉VM转发一个NAT端口。这就是魔术开始发生的地方。
  • ‘myapp,tcp ,, 4505,,4505’natpf1参数列表:
    • myapp 是端口转发规则的名称。它是可选的。
    • tcp 是您要转发的流量类型。另一个选项是 udp
    • 此时,主机IP仍有空间,但是您可以将其留空。
    • 4505 是Mac上您要接收流量的端口。这是您要提供给网络上其他主机的端口号。
    • 此时有一个来宾IP的空间,但是您可以将其留空。
    • 第二个 4505 是Docker VM上您要接收流量的端口。您可以将其更改为所需的任何值,而不会影响第一个端口。您只需要更改从Docker容器公开的端口即可。

您可以在https://www.virtualbox.org/manual/ch08.html#vboxmanage-
controlvm上
找到此命令的官方文档。



 类似资料:
  • 我需要创建一些docker容器,这些容器必须由同一网络上的其他计算机访问。 问题是,当我创建容器时,Docker获得的IP地址仅在主机内有效。

  • 问题内容: 我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器? 编辑:我正在Linux机器上本地运行docker。 更新: 除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作: 问题答案: 在Linux上本地运行Docker时,您可以使用接口

  • 我有一个docker容器在运行Jenkins。作为构建过程的一部分,我需要访问在主机上本地运行的web服务器。有没有一种方法可以将主机web服务器(可以配置为在端口上运行)公开给jenkins容器? 编辑:我正在Linux机器上原生运行docker。 更新: 除了@larsks下面的答案之外,要从主机获取主机IP的IP地址,我还做了以下操作:

  • 本文向大家介绍Docker端口映射实现网络访问的方法,包括了Docker端口映射实现网络访问的方法的使用技巧和注意事项,需要的朋友参考一下 Docker运行容器之后却发现没IP,没端口,那要如何访问容器呢? 下面我来介绍下docker通过端口映射来实现网络访问 一、从外部访问容器应用 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。 当容器中运行一些网

  • 问题内容: 我想在不同主机上的某些Docker容器中运行任务。而且我编写了一个管理器应用程序来管理容器(启动任务,停止任务,获取状态等)。容器启动后,它将向管理器发送一个http请求及其地址和端口,因此管理器将知道如何管理该容器。 由于同一主机上可能运行着多个容器,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个端口。 如何 在 Docker容器中获取映射的端