Docker容器的IP地址 - Virtualbox + Windows

9

当在Virtual Box中的Ubuntu虚拟机上运行一个Docker容器时,我应该使用什么IP地址来访问容器?

我的环境为:

  • Windows 10机器
  • 已安装Virtualbox,并在其中安装了Ubuntu虚拟机
  • 在虚拟机中安装了Docker
  • 并且有一个正在运行的端口为80/443的容器

在虚拟机中,我可以运行docker命令并查看正在运行的容器。

vagrant@ubuntu-xenial:~$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                                      NAMES
e7a41b3edecd        nrel/api-umbrella   "api-umbrella run"   17 minutes ago      Up 17 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   api-umbrella
vagrant@ubuntu-xenial:~$

那个容器的IP地址是:

vagrant@ubuntu-xenial:~$ docker inspect e7a41b3edecd | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
vagrant@ubuntu-xenial:~$

我可以在虚拟机上ping通IP地址172.17.0.2并使用curl命令访问http://172.17.0.2。但是在Windows机器上尝试访问http://172.17.0.2时没有响应。 问题: - 在Windows机器上,我该使用哪个IP地址来访问运行在虚拟机上的Docker容器?

你已经得到的答案都很有帮助。我建议你永远不要使用Docker内部IP地址进行任何操作,也不要使用docker inspect来查找它们:在像你遇到的情况下,它们无法路由,并且有更好的方法可以访问容器。 - David Maze
谢谢您,@DavidMaze。有哪些更好的方法?因为还没有成功地得到任何答案。谢谢,Melissa。 - Melissa
使用 docker run -p 或 Docker Compose 的 ports: 指令(如@BrayanCaldera的回答中所述),并在发布的端口上连接到虚拟机的IP地址(如@HanaAlaydrus的回答中所述)。 - David Maze
好的,谢谢@DavidMaze,我现在和你一样,已经在使用docker run -p了。 - Melissa
4个回答

3
为了将您的Docker IP暴露给主机,您需要将VM网络设置为“桥接适配器”。我使用的是macOS,但我认为在Windows中也是相同的。

enter image description here

接下来,检查您的虚拟机IP。例如,如果您的虚拟机IP为192.168.30.100,并且您的docker在8000端口运行。现在您可以通过IP 192.168.30.100:8000从您的主机访问您的docker。


谢谢Hana,我已经尝试过了,一旦我切换到桥接适配器,我就无法通过ssh进入虚拟机。所以不知道如何获取VM的IP。之前当设置NAT适配器时,我可以SSH并运行ifconfig,并获得172.17.0.1的IP,但是在Windows机器上使用任何适配器都无法使用。你是如何获取VM的IP的? - Melissa
你可以在Windows中使用ipconfig命令来查看虚拟网络适配器的IP地址。 - Brayan Caldera
@Melissa,你不能通过VirtualBox登录到你的虚拟机吗? - Hana Alaydrus
@Melissa 尝试同时使用网络,NAT和桥接。我从未尝试过,但也许会起作用。 - Hana Alaydrus
1
感谢@HanaAlaydrus,看起来这个方法很有效...现在我可以使用所有IP地址,包括从Windows的ipconfig获取的IP地址,以查看虚拟网络(VirtualBox)IP地址以及172.17.0.1、172.17.0.2。正如DaveMaze上面所说...不要使用容器的IP地址。 - Melissa

1
如果您正在使用带有Ubuntu虚拟机的Windows,并且在Ubuntu虚拟机中运行Docker容器,则需要公开您在docker-compose文件中或创建容器时所需的端口,例如: docker-compose.yml示例:
version: '3.1'
services:

  rabbitmq:
    build:
      context: .
      dockerfile: Rabbit-Dockerfile
    container_name: broker
    restart: always
    environment:
      TZ: GMT
      RABBITMQ_DEFAULT_USER: rabbitIpi
      RABBITMQ_DEFAULT_PASS: ipitasks2018
    tty: true
    hostname: rabbit
    networks:
      celerynet:
        aliases:
          - rabbit
  ports:
      - 5672:5672
      - 5671:5671
      - 4369:4369
      - 25672:25672
      - 8181:15672
networks:
  celerynet:
    driver: bridge

docker run 示例:

docker run -d -p 80:80 --name webserver nginx

在您将容器端口暴露到Ubuntu虚拟机后,您需要使用容器的端口访问Ubuntu虚拟机的IP地址。如果您的Ubuntu虚拟机上有防火墙,则需要打开容器将使用的端口。

1

要求:

  • Windows 7

  • Docker Toolbox

说明:

  1. 启动Docker快速启动终端
  2. 使用 docker-machine ssh default 命令在主机虚拟机内部进行SSH连接
  3. 键入命令 ip addr
  4. IP地址将被列出:

enter image description here


0

对于Windows系统,Vagrant BOX如果使用Oracle Virtual Box

网络 - 可以使用NAT模式 端口转发应该添加为规则..类似于以下内容 然后可以通过http:\localhost:3000进行浏览 Oracle VM网络设置


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接