简体   繁体   English

在Docker容器中连接到MySQL(Windows / VirtualBox上的Vagrant)

[英]Connect to MySQL in a docker container (Vagrant on Windows/VirtualBox)

I am trying to create a virtualised dev environment on Windows using Vagrant and Docker (as are a lot of people). 我正在尝试使用Vagrant和Docker(很多人)在Windows上创建虚拟化的开发环境。 The problem I have is that I cannot connect (or I dont understand how to) from MySQL Workbench running on my Windows laptop to my MySQL DB in a Docker container in Boot2Docker. 我的问题是我无法从Windows笔记本电脑上运行的MySQL Workbench连接到Boot2Docker的Docker容器中的MySQL数据库(或无法理解)。 This is how I visualise the connection: 这是我可视化连接的方式:

MySQL Work bench -> 3306 -> Boot2Docker -> 3306 -> Docker -> MySql MySQL工作台-> 3306-> Boot2Docker-> 3306-> Docker-> MySql

However I cannot connect to the DB from MySQLWorkbench. 但是我无法从MySQLWorkbench连接到数据库。 I have tried connection to the Boot2Docker host 10.0.2.15 on 3306 and tcp over ssh using the private key of the Boot2Docker box ".vagrant\\machines\\dockerhost\\virtualbox\\id" 我尝试使用Boot2Docker框“ .vagrant \\ machines \\ dockerhost \\ virtualbox \\ id”的私钥通过3sh连接到Boot306,并在ssh上连接到Boot2Docker主机10.0.2.15和tcp

What am I doing wrong/what have I misunderstood. 我在做什么错/我误解了什么。

My Vagrantfile: ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker' 我的Vagrantfile:ENV ['VAGRANT_DEFAULT_PROVIDER'] ='docker'

DOCKER_HOST_NAME = "dockerhost"
DOCKER_HOST_VAGRANTFILE = "./host/Vagrantfile"

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

  config.vm.network "forwarded_port", guest: 3306, host: 3306

  config.vm.define "mysql" do |v|
    v.vm.provider "docker" do |d|
      d.image = "mysql"
      d.env = {
        :MYSQL_ROOT_PASSWORD => "root",
        :MYSQL_DATABASE     => "dockertest",
        :MYSQL_USER         => "dockertest",
        :MYSQL_PASSWORD     => "docker"
      }
      d.ports =["3306:3306"]
      d.remains_running = "true"
      d.vagrant_machine = "#{DOCKER_HOST_NAME}"
      d.vagrant_vagrantfile = "#{DOCKER_HOST_VAGRANTFILE}"
    end
  end
end

My hosts/Vagrantfile (describing my Boot2docker host) is: 我的主机/ Vagrantfile(描述我的Boot2docker主机)是:

FORWARD_DOCKER_PORTS='true'
Vagrant.configure(2) do |config|


  config.vm.provision "docker"

  # The following line terminates all ssh connections. Therefore
  # Vagrant will be forced to reconnect.
  # That's a workaround to have the docker command in the PATH

  #Clear any existing ssh connections
  ####NOTE: ps aux seems to give variable results depending on run -> process number can be ####first #or second causing provision to fail!!!
  config.vm.provision "clear-ssh", type: "shell", inline:
        "ps aux | grep 'sshd:' | awk '{print $1}'  | xargs kill"
#        "ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"


  config.vm.define "dockerhost"
  config.vm.box = "dduportal/boot2docker"
  config.vm.network "forwarded_port",guest: 8080, host: 8080


  config.vm.provider "virtualbox" do |vb|
          vb.name = "dockerhost"

  end

end

Solved. 解决了。 As I suspected the ports were not getting forwarded between the host machine and the docker host. 我怀疑端口没有在主机和docker主机之间转发。 The solution is to move the port forwarding config line: 解决方案是移动端口转发配置行:

config.vm.network "forwarded_port", guest: 3306, host: 3306

into the docker host Vagrant file. 进入Docker主机Vagrant文​​件。 MySQL Workbench on the Windows host can then connect on localhost:3306. 然后,Windows主机上的MySQL Workbench可以在localhost:3306上连接。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM