Vagrant docker provisioner和provider不使用cmd:选项

时间:2014-12-04 03:07:11

标签: vagrant docker vagrantfile

我有Vagrant 1.6.5和Docker版本1.3.2。

如果我使用Docker提供程序或配置程序,我无法用自己的方式覆盖CMD。

示例提供程序配置我尝试过:

config.vm.provider :docker do |d|
   d.image = 'ubuntu'
   d.remains_running = true
   d.has_ssh = false
   d.ports = ["8080:8080"]
   d.volumes = ["/tmp/:/tmp"]
   d.cmd = ["ping", "-c 50", "127.0.0.1"]
end

示例provisoner配置我试过:

config.vm.provision "docker" do |d|
    d.run "ubuntu",
    args: '-v /tmp:/tmp -p 2222:22',
    cmd: "/bin/sh -c 'ping -c 10 127.0.0.1; touch /tmp/hello_world'"
end

这是官方Ubuntu Docker注册表用于构建的Dockerfile:

https://github.com/tianon/docker-brew-ubuntu-core/blob/b3d5822d7fa42d27cbf32e5fcc0b97b02c007618/trusty/Dockerfile

当我运行vagrant时,docker容器总是立即存在,docker ps -a的输出总是只显示在ubuntu Dockerfile中指定的命令。

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                          PORTS               NAMES
bb6922063bfe        ubuntu:14.04        "/bin/bash"            12 minutes ago      Exited (0) 6 seconds ago                            root_default_1417660734

我错过了什么吗?我应该能够使用Ubuntu映像并使用我自己的CMD选项来运行任意命令吗?

感谢 FLO

1 个答案:

答案 0 :(得分:0)

我正在使用Vagrant 1.6.5和Docker 1.3.1以及此Vagrant文​​件:

Vagrant.configure("2") do |config|
  config.vm.provider :docker do |d|
     d.image = 'ubuntu'
     d.remains_running = true
     d.has_ssh = false
     d.ports = ["8080:8080"]
     d.volumes = ["/tmp/:/tmp"]
     d.cmd = ["ping", "-c 51", "127.0.0.1"]
  end
end

使用以下命令:

vagrant up --provider=docker

我的输出:

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
700bea5ec611        ubuntu:latest       "ping '-c 50' 127.0.   5 minutes ago       Up 2 seconds        0.0.0.0:8080->8080/tcp   vagrant_default_1417725827   

使用此命令,一切正常。仅供我使用non-root access

的Docker