如何使用docker provider在vagrant上运行provision.sh

如何使用docker provider在vagrant上运行provision.sh,vagrant,docker,Vagrant,Docker,现在我已经在很多云上成功地使用了流浪者 我已经决定和docker一起尝试一些东西,但我可能错过了一些非常基本的东西,因为我失败了很多 我写了这个流浪汉档案: Vagrant.configure(“2”)do | config| config.vm.synced_文件夹“./synced_文件夹“,“/vagrant” config.vm.provision“shell”do|s| s、 path=“provision.sh” s、 特权=错误 结束 config.vm.provider:dock

现在我已经在很多云上成功地使用了流浪者

我已经决定和docker一起尝试一些东西,但我可能错过了一些非常基本的东西,因为我失败了很多

我写了这个流浪汉档案:

Vagrant.configure(“2”)do | config|
config.vm.synced_文件夹“./synced_文件夹“,“/vagrant”
config.vm.provision“shell”do|s|
s、 path=“provision.sh”
s、 特权=错误
结束
config.vm.provider:docker do | docker,覆盖|
docker.image='ubuntu'
结束
结束
这种配置适用于其他云(当然,如果我向其添加特定的云详细信息)

我的
provision.sh
文件只包含
echo“hello world”

我的同步文件夹有一个虚拟文件

我已经验证了
ubuntu
image在docker中运行良好。docker似乎工作得很好

当我运行
vagrant up--provider docker
时,我得到以下结果

The container started either never left the "stopped" state or
very quickly reverted to the "stopped" state. This is usually
because the container didn't execute a command that kept it running,
and usually indicates a misconfiguration.

If you meant for this container to not remain running, please
set the Docker provider configuration "remains_running" to "false":

  config.vm.provider "docker" do |d|
    d.remains_running = false
  end
我没有看到打印出来的
hello world

我已经找到了很多关于这个错误的问题和解答,但是没有什么可以用来解决我的问题


我做错了什么?

我也经历过同样的事情,并追随了一段时间。看来这将由即将发布的《流浪汉》小版本来解决

config.vm.provider :docker do |docker, override|
    docker.image = 'ubuntu'

end
您缺少一个命令,您需要一个命令来运行容器。大概是这样的:

config.vm.provider :docker do |docker, override|
    docker.image = 'ubuntu'
    docker.run = 'ubuntu'
end
config.vm.provider :docker do |docker, override|
    docker.image = 'ubuntu'
    docker.cmd = ["/usr/sbin/sshd", "-D"]
end
或者你可以这样做:

config.vm.provider :docker do |docker, override|
    docker.image = 'ubuntu'
    docker.run = 'ubuntu'
end
config.vm.provider :docker do |docker, override|
    docker.image = 'ubuntu'
    docker.cmd = ["/usr/sbin/sshd", "-D"]
end

所以我一直缺少一些非常基本的东西

我找到的解决办法很简单。使用来自以下方面的惊人贡献:

这里需要注意的重要一点是Dockerfile,它定义了容器中的SSH连接。如果没有SSH,它根本无法工作

然而-另一个人们缺少的默认事实-docker使用一个需要权限的套接字,但是运行sudo vagrant up--provider将无法解决此问题。要想顺利运行,您应该先
sudo su-
,或者将您的用户添加到
docker

请阅读更多关于此的信息:

因此,总结一下:

  • 克隆git存储库
  • sudo su-
  • 流浪者——提供者码头工人

==>机器已启动且运行良好

即使这将运行命令,我也希望运行配置脚本。这个问题的答案似乎是设置SSH。如果provision.sh中只有简单的内容,您可以将它们放在Dockerfile中,它们将在您执行流浪设置时执行。另一个选项:对于SSH,您可以向ubuntu基本映像添加SSH服务,或者提取现有的支持SSH的基本映像,例如phusion