我有一个 Vagrant virtualbox,它托管一个 Docker 容器。主机有一个需要在虚拟机和容器中访问的文件夹:
Host: /host/path => VM: /vagrant/path => Container: /docker/path
背景:/host/path/
保存项目的开发文件,这些文件在容器级别可用,以确保在进行更改时自动重新加载。
配置
Vagrant:
Vagrant.configure("2") do |config|
config.vm.synced_folder "/host/path", "/vagrant/path"
end
Docker:
docker run -name mycontainer -d -v /vagrant/path:/docker/path my/image
Problem
此配置一直有效,直到我重新加载虚拟机。例如,当我重新启动计算机并启动虚拟机时vagrant up
,docker容器只识别空文件夹/docker/path
。我想这可能是一些时间或顺序问题。/vagrant/path
不为空且内容正确。
目前我的解决方法是在每次重新启动虚拟机后重新加载容器:
docker rm mycontainer
docker kill mycontainer
docker run -name mycontainer -d -v /vagrant/path:/docker/path my/image
这感觉不对。有任何想法吗?
我也有同样的问题。发布的解决方案不符合我的要求。
这是我的解决方案。如果您运行多个容器,请迭代中的 cids/var/lib/vagrant/cids/
第一个脚本禁用 docker-daemon 容器在启动时自动启动。
仅当第二个脚本未运行时,才通过其 CID 启动容器。
这适用于初始流浪向上和以下流浪者[上|重新加载] --规定
# -*- mode: ruby -*-
# vi: set ft=ruby :
$disableAutostart = <<SCRIPT
if [ -e /home/vagrant/docker_autostart_disabled ]
then
echo "Docker Container autostart already disabled ... "
else
echo "Disable Docker Container autostart ..."
echo "DOCKER_OPTS=\"-r=false ${DOCKER_OPTS}\"" > /etc/default/docker
touch /home/vagrant/docker_autostart_disabled
fi
SCRIPT
$startContainer = <<SCRIPT
CID_FILE_PATH=/var/lib/vagrant/cids/
CID_FILE=$CID_FILE_PATH$(ls $CID_FILE_PATH)
if [ -e $CIDFILE ]
then
CID=$(cat $CID_FILE)
if ! $(docker inspect --format "{{.State.Running}}" $CID)
then
echo "Starting Container ..."
docker start $CID > /dev/null
else
echo "Docker Container already running ..."
fi
else
echo "No Container to start ... maybe something went wrong ..."
echo "Keep calm and try vagrant destroy && vagrant up"
fi
SCRIPT
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
... VM cfg Stuff ...
#Disable Docker autostart container
config.vm.provision "shell" ,
inline: $disableAutostart
config.vm.provision :docker,
version: "1.0.0" do |d|
d.build_image "/container/pseudo",
args:"-t cdh5/pseudo-base"
... more container
d.run "cdh5/data",
auto_assign_name: false,
args:"-v /vagrant/share:/home/student/share -h cdh5-single-node"
end
config.vm.provision :shell ,
inline: $startContainer,
run: "always"
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)