Vagrant Docker和shell Provisioniers的奇怪的流浪错误

Vagrant Docker和shell Provisioniers的奇怪的流浪错误,vagrant,provisioning,docker,vmware-fusion,Vagrant,Provisioning,Docker,Vmware Fusion,我有以下vagrant文件: VAGRANTFILE_API_VERSION = "2" $script = <<SCRIPT apt-get install -y mongodb mongo dummydb -u admin -p admin --eval "db.addUser('dummyuser', 'dummypass')" SCRIPT Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| confi

我有以下
vagrant文件

VAGRANTFILE_API_VERSION = "2"

$script = <<SCRIPT
  apt-get install -y mongodb
  mongo dummydb -u admin -p admin --eval "db.addUser('dummyuser', 'dummypass')"
SCRIPT

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64_vmware_fusion.box"

  # MongoDB ports
  config.vm.network "forwarded_port", guest: 27017, host: 27017

  # RabbitMQ ports
  config.vm.network "forwarded_port", guest: 5672, host: 5672
  config.vm.network "forwarded_port", guest: 55672, host: 55672

  config.vm.provision "docker" do |docker|
    docker.run "tutum/mongodb", daemonize: true, args: "-p 27017:27017 -e MONGODB_PASS=\"admin\""
    docker.run "tutum/rabbitmq", daemonize: true, args: "-p 5672:5672 -p 55672:55672 -e RABBITMQ_PASS=\"admin\""
  end

  # config.vm.provision "shell", inline: $script
end
这非常有效:创建了虚拟机,安装了Docker,设置了MongoDB和RabbitMQ,并相应地分配了密码。到目前为止,一切都很好

当我现在取消注释执行shell provisioner的最后一行时(根据,它应该是这样工作的),我得到了一个非常奇怪的错误:Vagrant安装Docker,拉取
tutum/mongodb
图像,然后告诉我运行容器失败:

==> default: Starting Docker containers...
==> default: -- Container: tutum/mongodb
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

          rm -f /var/lib/vagrant/cids/1bef9ddec8969e37432fbe8c55f6d9452cd61e4a
          docker run -cidfile=/var/lib/vagrant/cids/1bef9ddec8969e37432fbe8c55f6d9452cd61e4a -d -name tutum/mongodb -p 27017:27017 -e MONGODB_PASS="admin" tutum/mongodb 

Stdout from the command:

Stderr from the command:

stdin: is not a tty
Warning: '-cidfile' is deprecated, it will be replaced by '--cidfile' soon. See usage.
Warning: '-name' is deprecated, it will be replaced by '--name' soon. See usage.
Unable to find image 'tutum/mongodb' locally
Pulling repository tutum/mongodb

2014/03/27 01:31:40 Error: Invalid container name (tutum/mongodb), only [a-zA-Z0-9_.-] are allowed
我猜问题在于Vagrant自动应用于
docker run
调用的参数
-name tututum/mongodb

我不明白的是,为什么只有在添加shell provisioner时才会发生这种情况(这显然与设置Docker或Docker容器无关)

有人知道这是为什么吗

我使用的是Vagrant 1.5.1、Vagrant VMWare Fusion provider 2.3.4和VMWare 6.0.2,它们都在OS X 10.9.2上

有人知道是什么导致了这个问题,以及如何解决它吗


PS:我目前的解决方法是在
Vagrantfile
中应用
auto\u assign\u name:false
,但这只是一种解决方法。我很好奇实际的问题是什么以及如何正确地解决它。

Docker抱怨是因为单-而不是双-。检查指定它们的新方法

要成功运行该命令,请使用

docker run --cidfile=/var/lib/vagrant/cids/1bef9ddec8969e37432fbe8c55f6d9452cd61e4a -d --name="tutum/mongodb" -p 27017:27017 -e MONGODB_PASS="admin" tutum/mongodb
但在vagrant中解决这个问题需要更新核心provisioner代码

更新


这在1.5.2版中已经修复,现在看来他们正在使用
--name
--cidfile

Docker抱怨是因为单--而不是双--。检查指定它们的新方法

要成功运行该命令,请使用

docker run --cidfile=/var/lib/vagrant/cids/1bef9ddec8969e37432fbe8c55f6d9452cd61e4a -d --name="tutum/mongodb" -p 27017:27017 -e MONGODB_PASS="admin" tutum/mongodb
但在vagrant中解决这个问题需要更新核心provisioner代码

更新


这在1.5.2版中已经修复,现在看来他们正在使用
--name
--cidfile

Docker抱怨是因为单--而不是双--。检查指定它们的新方法

要成功运行该命令,请使用

docker run --cidfile=/var/lib/vagrant/cids/1bef9ddec8969e37432fbe8c55f6d9452cd61e4a -d --name="tutum/mongodb" -p 27017:27017 -e MONGODB_PASS="admin" tutum/mongodb
但在vagrant中解决这个问题需要更新核心provisioner代码

更新


这在1.5.2版中已经修复,现在看来他们正在使用
--name
--cidfile

Docker抱怨是因为单--而不是双--。检查指定它们的新方法

要成功运行该命令,请使用

docker run --cidfile=/var/lib/vagrant/cids/1bef9ddec8969e37432fbe8c55f6d9452cd61e4a -d --name="tutum/mongodb" -p 27017:27017 -e MONGODB_PASS="admin" tutum/mongodb
但在vagrant中解决这个问题需要更新核心provisioner代码

更新


这在1.5.2版中已经修复,现在看来他们正在使用
--name
--cidfile

但这不仅是缺少的破折号,也是缺少的引号,不是吗?是的,但它们是可选的。其想法是,Docker语法级别上存在一种需要Vagrant社区支持的弃用。我希望我能达到Ruby语言的水平,在这方面有所帮助。但这不仅仅是缺少破折号,也缺少引号,不是吗?是的,但它们是可选的。其想法是,Docker语法级别上存在一种需要Vagrant社区支持的弃用。我希望我能达到Ruby语言的水平,在这方面有所帮助。但这不仅仅是缺少破折号,也缺少引号,不是吗?是的,但它们是可选的。其想法是,Docker语法级别上存在一种需要Vagrant社区支持的弃用。我希望我能达到Ruby语言的水平,在这方面有所帮助。但这不仅仅是缺少破折号,也缺少引号,不是吗?是的,但它们是可选的。其想法是,Docker语法级别上存在一种需要Vagrant社区支持的弃用。我希望我能达到Ruby语言的水平,在这方面有所帮助。