在stream浪汉下运行Docker

我在运行Docker映像的Vagrant 1.7.2上遇到了令人困惑的问题。 我正在尝试基于这个Postgres映像启动一个普通的vanilla Docker容器。 如果我理解正确,Docker 应该试图将ssh放入此映像,而只需将其旋转并露出端口5432即可。

我的stream浪文件如下:

Vagrant.configure("2") do |config| config.vm.network :forwarded_port, guest: 5432, host: 5432 config.vm.provider "docker" do |d| d.image = "tutum/jboss" d.ports = ["5432:5432"] d.env = { POSTGRES_PASSWORD: 'postgres' } d.has_ssh = false end end 

来自vagrant up --provider=docker输出vagrant up --provider=docker是:

 vagrant up --provider=docker Bringing machine 'default' up with 'docker' provider... ==> default: Docker host is required. One will be created if necessary... default: Vagrant will now create or start a local VM to act as the Docker default: host. You'll see the output of the `vagrant up` for this VM below. default: default: Checking if box 'mitchellh/boot2docker' is up to date... default: Clearing any previously set forwarded ports... default: Clearing any previously set network interfaces... default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Forwarding ports... default: 2375 => 2375 (adapter 1) default: 22 => 2222 (adapter 1) default: Running 'pre-boot' VM customizations... default: Booting VM... default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: docker default: SSH auth method: private key default: Warning: Connection timeout. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... default: Warning: Authentication failure. Retrying... 

在这一点上,这个过程只是暂时搁置图像。

正如@Thomasleveil所提到的,has_ssh指的是容器,而不是在Windows和Mac机器上stream浪的主机虚拟机。

如果你运行'vagrant global-status'命令,你会发现实际上有两个被创build的stream浪者箱子:

 id name provider state directory -------------------------------------------------------------------- 1172194 default virtualbox running {dir}/.vagrant.d/data/docker-host d19539e default docker preparing {your image} 

您必须通过调用“vagrant destroy {docker-host id}”来销毁docker-host图像,然后将以下行添加到您的Vagrantfile中:

 config.ssh.insert_key = false 

打电话给'vagrant up –provider = docker'一次,你应该没问题。

至于为什么你甚至需要添加这条线, 这个github问题解释得很好。

AndyShinn写道:

它看起来像第一次,stream浪者用生成的SSH密钥replace不安全的SSH密钥。 然后再次停止/重新启动,该密钥被恢复回虚拟机中的不安全密钥,但Vagrant正在尝试使用新生成的公共密钥进行SSH。 看起来像这是因为/home/docker/.ssh是tmpfs上的根挂载的一部分。

这样的Vagrantfile将使Vagrant创build一个VM(运行ssh)充当Docker主机。 一旦这个虚拟机被创build,引导和configuration(通过ssh),Vagrant会告诉Docker主机拉动tutum/jboss镜像并运行一个容器(没有ssh)。

您的问题是stream浪汉无法通过ssh连接到应该充当Docker主机的VM mitchellh/boot2docker