【问题标题】:Accessing vagrant provider docker from vagrant virtualbox从 vagrant virtualbox 访问 vagrant provider docker
【发布时间】:2016-10-16 08:19:10
【问题描述】:

我在 Mac OS X 上运行 Vagrant 和 Virtualbox。我使用 Virtualbox 提供程序(some_centos 机器)创建了一个 vagrant 盒子,使用 docker 提供程序创建了第二个盒子。下面你会看到 docker 定义。

config.vm.define "mysql" do |m|
    m.vm.hostname = "mysql-host"
    m.vm.synced_folder ".", "/vagrant", disabled: true
    m.ssh.insert_key = false
      m.ssh.username = 'docker'
      m.ssh.password = 'tcuser'
      m.vm.network "public_network", use_dhcp_assigned_default_route: true

m.vm.provider "docker" do |docker|

  # Specify the Docker image to use
  docker.image = "mysql/mysql-server"

  # Specify port mappings
  # If omitted, no ports are mapped!

  docker.create_args = ["-p", "3306:3306","-e","MYSQL_ROOT_PASSWORD=password", "-e", "MYSQL_DATABASE=database"]

  # Specify a friendly name for the Docker container
  docker.name = 'mysql-server-container'

  #We want to keep it running.
  docker.remains_running = true
end

结束

两台机器都启动了,但我想做的是通过使用 mysql 客户端连接到它来从“some_centos”主机访问该 mysql docker 机器。不幸的是我失败了。请注意,在 Mac OS 上,当您使用 vagrant docker provider 时,它将创建 boot2docker iamge 然后创建 docker。不知道如何解决问题,例如我可以 ssh 进入“some_centos”,但不能运行 mysql -h "docker-host" -uroot -p。

【问题讨论】:

    标签: docker vagrant virtualbox boot2docker


    【解决方案1】:

    基本上,您需要进行双端口转发。首先,您将容器端口转发到 Vagrant,然后将 vagrant 端口转发到您的 Mac 端口。

    运行 docker 容器时,使用如下代码:

    docker container run -d --name nginx-test -p 8080:80 nginx
    

    在你的 Vagrant 文件中,在 end 上方添加这一行:

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

    这样,容器的 80 端口会被转发到 vagrant 的 8080 端口,而 vagrant 的 8080 端口会被转发到主机的 1200 端口。

    我希望这张图片会有所帮助:

    docker-vagrant-port-forwarding

    【讨论】:

    • 您能否将屏幕截图中的一些代码添加到您的答案中?这样它就可以索引并且更具可读性,然后您可以使用屏幕截图链接作为额外参考,而不是答案的重要部分(它现在依赖于外部网站)。
    【解决方案2】:

    我找到了解决方法。因此,在 MAC OS X 上,您还需要在该虚拟机上进行端口转发,但需要手动进行。所以你需要运行以下:

    VBoxManage controlvm name_of_your_virtual_machine natpf1 "mysql,tcp,,3306,,3306""

    然后我就可以做mysql了。所以我需要将这个 shell 配置器添加到我的 Vagrantfile 中。

    【讨论】:

    • 为什么不在 Vagrantfile 中添加 config.vm.network "forwarded_port", guest: 3306, host: 3306
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多