【问题标题】:Strange Vagrant error with Docker and shell provisionersDocker 和 shell 配置程序的奇怪 Vagrant 错误
【发布时间】:2014-03-27 08:56:37
【问题描述】:

我有以下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,拉取 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

我猜问题出在参数-name tutum/mongodb,Vagrant 自动应用于docker run 调用。

我不明白为什么会发生这种情况只有如果我添加了 shell 配置器(这显然与设置 Docker 或 Docker 容器没有任何关系)。

有人知道这是为什么吗?

我在 OS X 10.9.2 上使用 Vagrant 1.5.1、Vagrant VMWare Fusion provider 2.3.4 和 VMWare 6.0.2。

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

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

【问题讨论】:

    标签: vagrant provisioning docker vmware-fusion


    【解决方案1】:

    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

    【讨论】:

    • 但是不仅缺少破折号,还缺少引号,不是吗?
    • 是的,但它们是可选的。这个想法是 Docker 语法级别的弃用需要得到 Vagrant 社区的支持。不过,我希望我能达到 Ruby 语言的水平,以便在这方面提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 2014-07-31
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多