Docker和shell配置程序出现奇怪的Vagrant错误

时间:2014-03-27 08:56:37

标签: vagrant provisioning docker vmware-fusion

我有以下Vagrantfile

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

当我使用

运行时
$ vagrant up --provider=vmware_fusion

这非常有效:创建了虚拟机,安装了Docker,并设置了MongoDB和RabbitMQ,并相应地分配了密码。到目前为止,一切都很好。

当我现在取消注释执行shell配置程序的最后一行(根据documentation,应该这样工作),我得到一个非常奇怪的错误:Vagrant安装Docker,拉出{{1} }然后告诉我运行容器失败:

tutum/mongodb

我猜问题是Vagrant自动应用于==> 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 来电的参数-name tutum/mongodb

我不明白为什么如果我添加shell配置程序(显然没有没有设置Docker或Docker容器),只会发生 。< / p>

有人知道为什么会这样吗?

我在OS X 10.9.2上使用Vagrant 1.5.1,Vagrant VMWare Fusion提供商2.3.4和VMWare 6.0.2。

是否有人知道可能导致此问题的原因以及如何解决?

PS:我目前的解决方法是在docker run中应用auto_assign_name: false,但这只是一种解决方法。我很好奇实际问题是什么,以及如何正确解决问题。

1 个答案:

答案 0 :(得分:3)

Docker因为单个 - 而不是双 - 而抱怨。检查the docs以获取指定它们的新方法。

要成功运行命令,请使用

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

但是在vagrant中解决这个问题需要更新核心供应商代码。

<强>更新

这在1.5.2版本中得到修复,查看this commit似乎他们现在正在使用--name--cidfile