分享 Vagrant docker 到主机

分享 Vagrant docker 到主机

我正在设置一个带有开发环境的 Vagrant 盒子。我在 Vagrant 中运行了一些 Web 应用程序、一些其他服务、一个数据库和一个 Docker。大多数服务都是内部使用的,我为 Web 应用程序做了端口转发,这样我就可以在主机上使用 访问它们localhost:FORWARDED_PORT

但是其中一个 Web 应用需要在 docker 中运行一些 JavaScript。因此它需要从主机上的 Web 浏览器访问它。在内部,我可以看到以下内容:

4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever

Docker 中运行的服务正在提供一些静态 JS http://172.17.0.2:4567。我需要能够从主机中的 Web 应用程序访问该内部地址,如何设置?

答案1

您无法从 vagrant box VM 外部看到内部 do docker IP。但是您可以在容器中公开应用程序的端口(因此它将是一个可以转发为属于 vagrant VM 的端口),并将该 JavaScript 引用为 vagrant box 的外部 IP/名称(即使在放置链接的页面中使用 SERVER_NAME 环境变量)和相应的端口。

答案2

我在日常工作中就经常做这种事情。这里有两件事需要考虑:

  1. dockerized 服务的端口必须转发到你的 vagrant vm
  2. vagrant box 上的(现在指向 docker 容器)端口必须转发到你的物理盒子

由于我不知道您的 dockerized 服务,因此我在这里以 dockerized Redis 的标准发行版为例。由于我正在使用图 (http://www.fig.sh/)启动我的docker容器,我将不得不在示例中向您展示第一部分的答案fig.yml

redis:
  image: redis:latest
  ports:
   - "6379:6379"

这会在 docker 容器中运行 Redis 键值存储,并将其端口 6379 转发到 vagrant box 上的端口 6379。现在您可以从 INSIDE vagrant vm 通过 localhost:6379 连接到 Redis,所以我们已经完成了一半。

第二步是,将其转发到您的本地机器,通过将其添加到您的Vagrantfile

config.vm.network :forwarded_port, guest: 6379, host: 6379

瞧:现在您可以从物理机器通过 localhost:6379 访问 Redis。

对于您的情况,这意味着您必须在 web 应用程序的代码中进行更改http://172.17.0.2:4567http://127.0.0.1:4567以便它实际使用新设置的端口转发。

相关内容