从 vagrant virtualbox 访问 vagrant provider docker
Accessing vagrant provider docker from vagrant virtualbox
我在 运行Mac OS X 上使用 Vagrant 和 Virtualbox。我使用 Virtualbox 提供程序(some_centos 机器)创建了一个 vagrant box,第二个使用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 提供程序时,它将创建 boot2docker iamge,然后创建 docker。不确定如何解决这个问题,例如我可以 ssh 进入 "some_centos",但不能 运行 mysql -h "docker-host" -uroot -p.
我已经找到解决方法。所以看起来在 MAC OS X 上你还需要在该虚拟机上进行端口转发,但需要手动进行。所以你需要运行以下:
VBoxManage controlvm name_of_your_virtual_machine natpf1 "mysql,tcp,,3306,,3306"
"
然后我就能做到 mysql。所以我需要将这个 shell provisioner 添加到我的 Vagrantfile 中。
基本上,你需要有双端口转发。首先,您将容器端口转发到 Vagrant,然后将 vagrant 端口转发到您的 Mac 端口。
当 运行 您的 docker 容器时,使用如下代码:
docker container run -d --name nginx-test -p 8080:80 nginx
在您的 Vagrant 文件中,在结尾处添加以下行:
config.vm.network "forwarded_port", guest: 8080, host: 1200
这样,容器的 80 端口将转发到 vagrant 的 8080 端口,而 vagrant 的 8080 端口将转发到主机的 1200 端口。
希望这张图片对您有所帮助:
docker-vagrant-port-forwarding
我在 运行Mac OS X 上使用 Vagrant 和 Virtualbox。我使用 Virtualbox 提供程序(some_centos 机器)创建了一个 vagrant box,第二个使用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 提供程序时,它将创建 boot2docker iamge,然后创建 docker。不确定如何解决这个问题,例如我可以 ssh 进入 "some_centos",但不能 运行 mysql -h "docker-host" -uroot -p.
我已经找到解决方法。所以看起来在 MAC OS X 上你还需要在该虚拟机上进行端口转发,但需要手动进行。所以你需要运行以下:
VBoxManage controlvm name_of_your_virtual_machine natpf1 "mysql,tcp,,3306,,3306"
"
然后我就能做到 mysql。所以我需要将这个 shell provisioner 添加到我的 Vagrantfile 中。
基本上,你需要有双端口转发。首先,您将容器端口转发到 Vagrant,然后将 vagrant 端口转发到您的 Mac 端口。
当 运行 您的 docker 容器时,使用如下代码:
docker container run -d --name nginx-test -p 8080:80 nginx
在您的 Vagrant 文件中,在结尾处添加以下行:
config.vm.network "forwarded_port", guest: 8080, host: 1200
这样,容器的 80 端口将转发到 vagrant 的 8080 端口,而 vagrant 的 8080 端口将转发到主机的 1200 端口。
希望这张图片对您有所帮助:
docker-vagrant-port-forwarding