Alp*_*Alp 9 linux vagrant docker
我有一个Vagrant虚拟框,它托管一个Docker容器.主机有一个文件夹,需要在vm和容器中访问:
Host: /host/path => VM: /vagrant/path => Container: /docker/path
Run Code Online (Sandbox Code Playgroud)
背景:/host/path/
保存项目的开发文件,这些文件在容器级别可用,以确保在进行更改时自动重新加载.
流浪汉:
Vagrant.configure("2") do |config|
config.vm.synced_folder "/host/path", "/vagrant/path"
end
Run Code Online (Sandbox Code Playgroud)
泊坞窗:
docker run -name mycontainer -d -v /vagrant/path:/docker/path my/image
Run Code Online (Sandbox Code Playgroud)
此配置有效,直到我重新加载vm.例如,当我重新启动计算机并启动vm时vagrant up
,docker容器只识别一个空文件夹/docker/path
.我想这可能是一些时间或顺序问题./vagrant/path
不是空的并且具有正确的内容.
我的解决方法是在每次重启vm后重新加载容器:
docker rm mycontainer
docker kill mycontainer
docker run -name mycontainer -d -v /vagrant/path:/docker/path my/image
Run Code Online (Sandbox Code Playgroud)
那感觉不对.有任何想法吗?
小智 4
我也有同样的问题。发布的解决方案不符合我的要求。
这是我的解决方案。如果您运行多个容器,请迭代中的 cids /var/lib/vagrant/cids/中的 cids
第一个脚本禁用 docker-deamon 容器在启动时自动启动。仅当第二个脚本未运行时,才通过其 CID 启动容器。
这适用于初始vagrant up和后续vagrant [ up | 重新加载] --规定
# -*- 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4277 次 |
最近记录: |