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

我试图利用Vagrant 1.6的Docker提供商,我似乎遇到了一个麻烦。 我可以成功地启动Docker容器和客户操作系统,但是我无法从主机操作系统访问容器内部提供的服务。 这是我的stream浪文件:

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 

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

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

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

好吧,所以我终于明白了这一点,结果是解决scheme是根本不使用boot2docker。 基于我通过Vagrant源代码进行的一些潜水,阅读问题以及重新查看Docker提供商介绍video,事实certificate,您需要使用代理虚拟机来托pipe容器而不是boot2docker。

为了进行设置,我修改了我的Vagrantfile,以包含vagrant_vagrantfile的configuration选项:

 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 

使用Dockerconfiguration程序会自动将Docker安装在代理虚拟机上。 内联shell脚本强制Vagrant重新login到该框,以便在安装后可以使用Docker。 最后,我将这个Vagrant文​​件中所需的端口转发给原来的ports (同时仍然使用原始portsconfiguration选项)。

就像使用默认的boot2docker策略一样,Vagrant将足够聪明,可以将代理VM的现有实例用于任何使用它的映像。

希望这将有助于在路上的人。

要从boot2docker转发端口(而不是从不使用boot2docker的自定义代理VM转发端口),您需要通过VirtualBox手动添加端口转发,或者在运行vagrant up之后运行以下脚本:

 export PORT=3306 export REASON=mysql export HOST_VM=`VBoxManage list runningvms | grep docker-host | awk '{ print $1 }' | sed 's/"//g'` VBoxManage controlvm $HOST_VM natpf1 "docker-$REASON-$PORT-port-forward,tcp,127.0.0.1,$PORT,,$PORT"