我试图利用Vagrant1.6的码头供应商,我似乎遇到了一个障碍。我可以成功地打开Docker容器和来宾操作系统,但是我无法从主机OS访问容器中所提供的服务。这是我的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我的理解是,在OS上运行vagrant up --provider=docker将启动运行boot2docker的VM,然后运行容器。运行vagrant docker-logs似乎可以确认我的容器已经创建并且服务已经启动,但是现在我无法从我的OS主机上找到如何访问服务。如果我使用的是标准的VirtualBox提供程序,我希望使用config.vm.network :forwarded_port指令来处理转发,但是添加这一点似乎没有什么区别。
我需要做什么才能从我的OS主机访问这个服务?
更新:供参考,这是图像的Dockerfile:https://github.com/moul/docker-icecast/blob/master/Dockerfile
发布于 2014-06-01 21:12:51
好的,所以我终于明白了这一点,最终的解决方案是根本不使用boot2docker。基于我在Vagrant源代码中所做的一些尝试,阅读问题,并重新观看Docker提供者的介绍视频,结果发现您需要使用代理VM来承载您的容器,而不是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将使用该文件来拆分代理VM:
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提供程序将自动在代理VM上为您安装Docker。内联shell脚本强制Vagrant重新登录到框中,以便在安装后可以利用Docker。最后,我在这个Vagrantfile中转发我需要的端口,而不是原始的端口(同时在原始文件中仍然使用ports配置选项)。
与默认的boot2docker策略一样,Vagrant将足够聪明地将代理VM的现有实例重用到任何使用它的映像中。
希望这能对未来的人有所帮助。
发布于 2014-06-18 14:09:49
要从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"https://stackoverflow.com/questions/23948831
复制相似问题