如何使用Vagrant 1.6和Docker提供程序映射Docker端口

10

我目前正在尝试将我的docker容器端口从容器映射到主机(boot2docker)。最终目标是将这些端口映射到我的物理机器,但要一步一步来。

我的Vagrantfile当前看起来像:

Vagrant.configure("2") do |config|

    config.vm.define "app1" do |a|
        a.vm.provider "docker" do |d|
            d.build_dir = "dockers/app1"
            d.name = "app1"
            d.ports << "8080:8080"
            d.ports << "8443:8443"
            d.volumes << "/vagrant/data/app1:/var/app1"
        end
    end

    config.vm.define "app2" do |a|
        a.vm.provider "docker" do |d|
            d.build_dir = "dockers/app2"
            d.name = "app2"
            d.ports << "8081:8081"
            d.link("app1:app1")
        end
    end
end
当我运行vagrant up app1 --provider=docker命令时,容器可以正确启动,但是当我执行docker ps命令时,发现端口没有被映射。
0.0.0.0:2222->22/tcp, 8080/tcp, 8443/tcp

我正在使用VirtualBox,因此我已经使用了GUI将我的物理机器的8080端口转发到主机(boot2docker)的8080端口。

我使用VirtualBox, 用它的GUI来将我的物理机器的8080端口映射到主机(boot2docker)的8080端口。


你能粘贴一个docker inspect的输出吗? - Pak
你正在使用Vagrant 1.6.0或1.6.1吗?看起来这可能是一个在1.6.2中修复的问题:https://github.com/mitchellh/vagrant/issues/3723 - Andy Shinn
1个回答

2

您的配置应该可以在Linux上工作,但如果您使用的是Virtualbox(我假设您是在Mac或Windows上),那么您需要为虚拟机创建一个Vagrantfile,使其可以连接到主机。

Vagrant.configure("2") do |config|

  config.vm.box = "busybox"
  config.vm.provider "virtualbox" do |v|
    v.memory = 768
    v.cpus = 2
  end

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

end

假设这在您当前的Vagrantfile相对于host-vm / Vagrantfile。因此,您当前的Vagrantfile应如下所示:

Vagrant.configure("2") do |config|

    config.vm.define "app1" do |a|
        a.vm.provider "docker" do |d|
            d.vagrant_vagrantfile = "host-vm/Vagrantfile"
            d.build_dir = "dockers/app1"
            d.name = "app1"
            d.ports = ["8080:8080"]
            d.ports = ["8443:8443"]
            d.create_args = ["-v", "/vagrant/data/app1:/var/app1"]
        end
    end

    config.vm.define "app2" do |a|
        a.vm.provider "docker" do |d|
            d.vagrant_vagrantfile = "host-vm/Vagrantfile"
            d.build_dir = "dockers/app2"
            d.name = "app2"
            d.ports = ["8081:8081"]
            d.link("app1:app1")
        end
    end
end

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