使用 Vagrant Docker 提供程序从 boot2docker 转发端口

2023-11-21

我正在尝试利用 Vagrant 1.6 的 Docker 提供程序,但似乎遇到了障碍。我可以成功启动 Docker 容器和来宾操作系统,但无法从主机操作系统访问容器内启动的服务。这是我的 Vagrantfile:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.network :forwarded_port, guest: 8000, host: 8000

  config.vm.define "icecast" do |v|
    v.vm.provider "docker" do |d|
      d.image = "moul/icecast"
      d.ports = ["8000:8000"]

      d.env = {
        # SOURCE_PASSWORD: 'password',
        ADMIN_PASSWORD: 'password',
        # PASSWORD: 'password',
        # RELAY_PASSWORD: 'password'
      }
    end
  end
end

我的理解是跑步vagrant up --provider=docker在 OS X 上将启动一个运行 boot2docker 的虚拟机,然后该虚拟机将运行我的容器。跑步vagrant docker-logs似乎确认我的容器已创建并且服务已启动,但现在我无法弄清楚如何从我的 OS X 主机访问该服务。如果我使用标准 VirtualBox 提供程序,我会期望config.vm.network :forwarded_port指令来处理转发,但添加它似乎没有任何区别。

我需要做什么才能从我的 OS X 主机访问此服务?

Update:作为参考,这里是图像的 Dockerfile:https://github.com/moul/docker-icecast/blob/master/Dockerfile


好吧,我终于想通了,结果证明解决方案是根本不使用 boot2docker。根据我对 Vagrant 源代码的深入研究、阅读问题以及重新观看 Docker 提供程序介绍视频,结果表明您需要使用代理虚拟机来托管容器,而不是 boot2docker。

为了进行设置,我修改了 Vagrantfile 以包含一个配置选项vagrant_vagrantfile:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "icecast" do |v|
    v.vm.provider "docker" do |d|
      d.image = "moul/icecast"
      d.ports = ["8000:8000"]

      d.env = {
        # SOURCE_PASSWORD: 'password',
        ADMIN_PASSWORD: 'password',
        # PASSWORD: 'password',
        # RELAY_PASSWORD: 'password'
      }

      d.vagrant_vagrantfile = "./Vagrantfile.proxy"
    end
  end
end

然后我添加了一个附加文件 (Vagrantfile.proxy),Vagrant 将使用该文件来启动代理虚拟机:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "docker"
  config.vm.provision "shell", inline:
    "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"

  config.vm.network :forwarded_port, guest: 8000, host: 8000
end

使用 Docker 配置程序将自动为您在代理虚拟机上安装 Docker。内联 shell 脚本强制 Vagrant 重新登录到容器中,以便在安装后可以使用 Docker。最后,我在此 Vagrantfile 中转发我需要的端口,而不是原始端口(同时仍然使用ports原始配置选项)。

就像默认的 boot2docker 策略一样,Vagrant 足够聪明,可以为使用它的任何映像重用代理虚拟机的现有实例。

希望这对以后的人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Vagrant Docker 提供程序从 boot2docker 转发端口 的相关文章

随机推荐

  • 当多个客户端推送到同一个远程仓库时,git如何处理并发问题?

    对于每个http请求 一个单独的进程git http backend运行在服务器端 当多个客户端推送到同一个远程存储库时 它如何处理并发问题 例如 它是否创建锁定文件以及名称是什么 注意 远程存储库是裸露的 与通过 SSH 调用的方式相同
  • 使用用户定义的转换将字符串转换为类型安全枚举

    为了将 Enum 与字符串结合使用 我实现了一个基于 StringEnum 类https stackoverflow com a 424414 1293385 但是 当我尝试实现建议的用户定义转换操作时 我遇到了问题 StringEnum类
  • 应用工具栏时崩溃

    我是 Android 编程新手 当我将工具栏应用到我的应用程序中时 我遇到了这个问题 当我尝试运行该应用程序时 它崩溃了 这是代码 ToolbarActivity java package com example toolbar impor
  • 异步方法中的最后一个异步调用是否需要等待?

    我无法理解当异步方法调用是我的异步方法中的最后一个调用时是否需要等待语句 例如 public async Task CallAsync byte data await Call1Async data Call2Async data publ
  • Hibernate OnetoMany、ManyToOne 映射给出 null

    我有 2 个类 名为 PurchaseList java 和 PurchaseListItems java 我必须在PurchaseListItems 中映射PurchaseList 采购清单 java OneToMany cascade
  • gitea 和 jenkins webhook

    我正在测试 Gitea 并希望它能够触发 Jenkins 构建 这是非常基本的用例 我知道现有的 GOGs webhook 插件可以使用 但最近还发现 Jenkins 也有一个 Gitea 插件 在 GOGS 情况下 您可以通过以下方式致电
  • Ruby 安装 (2.2.2) 在 macOS Big Sur 中失败

    我在 macOS Big Sur 上安装 Ruby 2 2 2 时遇到了一些问题 有人遇到过类似的问题并且能够解决吗 非常感谢 Error Downloading openssl 1 0 2u tar gz gt https dqw8nmj
  • Android M:如何获取当前前台活动包名称(从服务)

    在Android L上很容易从ActivityManager服务中获取正在运行的任务列表 并且首先返回当前活动的任务 但它不再适用于 Android M 返回列表仅包含我的应用程序任务 有什么办法解决吗 My code List
  • 计数汽车 OpenCV + Python 问题

    我已经trying在过线时计算汽车数量 它可以工作 但问题是它对一辆车进行多次计数 这是荒谬的 因为它只应该计算一次 这是我正在使用的代码 import cv2 import numpy as np bgsMOG cv2 Backgroun
  • 为什么 (long)9223372036854665200d 给我 9223372036854665216?

    我知道一些带有精确误差的奇怪东西 但我无法理解 Why is long 9223372036854665200d给我9223372036854665216 9223372036854665200d是类型常量double 然而 9223372
  • Ruby 和 Python 版本的“self”有什么区别?

    我已经完成了一些 Python 但现在才开始使用 Ruby我可以很好地解释这两种语言中 自我 之间的区别 乍一看很明显 Self 不是 Python 中的关键字 但无论你如何称呼它 都有一个 self like 值 Python 方法接收
  • 从 Android 应用程序安装程序和主屏幕启动应用程序时出现活动堆栈排序问题

    仅出于测试目的 我允许通过 URL 下载和安装我的应用程序 APK 一旦下载到手机上 它就可以通过 Android 应用程序安装程序启动 用户可以选择将其安装到设备上然后运行 考虑一下我们是否以上述方式下载并运行应用程序 我的应用程序中的主
  • 如何将 Expander ToggleButton 放在右侧

    默认情况下 扩展器有一个左对齐的切换按钮 但在我的 WPF 应用程序中 我希望切换按钮位于标题的右侧 而不需要 Expression Blend 的帮助 只是简单的 XAML 和 或 C 我的扩展器包含一个垂直方向的堆栈面板 其中标签作为其
  • 我应该如何将 Python 嵌入到 C++ Builder / Delphi 2010 应用程序中?

    我有兴趣尝试在我的应用程序中嵌入 Python 让用户在应用程序环境中运行 Python 脚本 访问内部 C 实现的 对象等 我对此很陌生 所以不知道到底是什么我正在做 我读过了将 Python 嵌入到另一个应用程序中 尽管这似乎只讨论 C
  • 我需要 __closure__

    我刚刚查看了这个非常有趣的思维导图 http www mindmeister com 10510492 python underscore 我想知道一些新的含义是什么 比如 code and closure 我用谷歌搜索了一下 但没有具体的
  • ggplot2 - 在绘图之外进行注释

    我想将样本大小值与绘图上的点相关联 我可以用geom text将数字放置在点附近 但这很混乱 将它们沿着地块的外边缘排列起来会干净得多 例如 我有 df data frame y c cat1 cat2 cat3 x c 12 10 14
  • ASP.NET 黄屏死机 (YSOD) 可以按需生成或捕获吗?

    例如 我们只想从 Global asax 错误处理程序捕获 YSOD 输出以在错误报告电子邮件中使用 有没有办法利用内置的 ysod 生成器 我会调查ELMAH ASP NET 的错误日志模块和处理程序 ELMAH 错误记录模块和 Hand
  • 本地 MQTT mosquitto 实例正在连接 ECONNREFUSED 127.0.0.1:1883

    我正在尝试通过 docker 和 docker compose 运行本地 mosquitto 代理 发布者和订阅者设置 但发布者无法连接到代理 但是 通过 cli 连接到本地代理可以正常工作 运行以下设置时出现以下错误 Error conn
  • 如何/是否在 Xcode 中制作通用故事板

    在 Xcode 中创建情节提要文件时 必须选择它是适用于 iPhone 还是 iPad 这意味着人们应该始终将 iPhone 和 iPad UI 放入单独的故事板中 这是真的 我的应用程序有多个故事板 虽然 iPhone 和 iPad 之间
  • 使用 Vagrant Docker 提供程序从 boot2docker 转发端口

    我正在尝试利用 Vagrant 1 6 的 Docker 提供程序 但似乎遇到了障碍 我可以成功启动 Docker 容器和来宾操作系统 但无法从主机操作系统访问容器内启动的服务 这是我的 Vagrantfile VAGRANTFILE AP