2

我为 Vagrant 使用 Docker 配置器。他们在文档中说:

除了拉取镜像之外,Docker 配置器还可以为您运行和启动容器。这使您可以自动启动服务作为 vagrant up 的一部分。

这是我的 Vagrantfile 的一部分:

  config.vm.provision "docker" do |d|                                                                         
    d.run "jwilder/nginx-proxy",                                                                              
      args: "-v /var/run/docker.sock:/tmp/docker.sock:ro -v /vagrant/certs:/etc/nginx/certs -p 80:80 -p 443:443"
    d.run "redis",                                                                                            
      args: "-v /vagrant/data:/data"                                                                          
    ...
  end 

但是之后vagrant haltvagrant up的容器被停止了。

$vagrant@vagrant-ubuntu-trusty-64:~$ docker ps -a

CONTAINER ID    ..  STATUS      ..             NAMES
6bb965d1a7b9        Exited (137) 2 days ago    redis                 
7f45214f6f06        Exited (2) 2 days ago      jwilder-nginx-proxy   
4

1 回答 1

1

好吧,我没有找到 Vagrant 在启动时不启动容器的原因,但解决方法是使用 Docker 的重启策略。因此,我更新了我的 Vagrantfile,删除了所有容器,并vagrant provision使用新的重启策略再次运行容器:

config.vm.provision "docker" do |d|                                                                         
  d.run "jwilder/nginx-proxy",                                                                              
    args: "--restart=always -v /var/run/docker.sock:/tmp/docker.sock:ro -v /vagrant/certs:/etc/nginx/certs -p 80:80 -p 443:443"
  d.run "redis",                                                                                            
    args: "--restart=always -v /vagrant/data:/data"                                                                          
  ...
end

--restart=总是

无论退出状态如何,始终重新启动容器。当您指定 always 时,Docker 守护程序将尝试无限期地重新启动容器。

现在之后vagrant haltvagrant up启动容器。

于 2015-07-26T20:46:01.767 回答