Ответ 1
Хорошо, поэтому я, наконец, понял это, и выясняется, что решение заключается в том, чтобы вообще не использовать boot2docker. Основываясь на некоторых погружениях, которые я делал через источник Vagrant, читал вопросы и пересматривал видеоролики, предлагающие вход в Docker, выясняется, что вам нужно использовать прокси-VM для размещения ваших контейнеров вместо boot2docker.
Чтобы установить это, я изменил свой Vagrantfile, чтобы включить параметр конфигурации для vagrant_vagrantfile
:
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define "icecast" do |v|
v.vm.provider "docker" do |d|
d.image = "moul/icecast"
d.ports = ["8000:8000"]
d.env = {
# SOURCE_PASSWORD: 'password',
ADMIN_PASSWORD: 'password',
# PASSWORD: 'password',
# RELAY_PASSWORD: 'password'
}
d.vagrant_vagrantfile = "./Vagrantfile.proxy"
end
end
end
Затем я добавил дополнительный файл (Vagrantfile.proxy), который Vagrant будет использовать для разворота прокси-виртуальной машины:
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "docker"
config.vm.provision "shell", inline:
"ps aux | grep 'sshd:' | awk '{print $2}' | xargs kill"
config.vm.network :forwarded_port, guest: 8000, host: 8000
end
Использование модуля Docker будет автоматически устанавливать Docker на прокси-виртуальную машину для вас. Встроенная оболочка script заставляет Vagrant записываться обратно в поле, чтобы он мог использовать Docker после его установки. Наконец, я пересылаю порт, который мне нужен в этом Vagrantfile, в отличие от оригинала (при использовании опции ports
config в оригинале).
Как и при использовании стратегии boot2docker по умолчанию, Vagrant будет достаточно умным, чтобы повторно использовать существующие экземпляры прокси-VM для любого изображения, которое его использует.
Надеюсь, это будет полезно для кого-то в будущем.