2015-09-15 3 views
2

Я использую Saltstack/Shell для обеспечения бродящей машины, но теперь я хотел бы добавить Docker в качестве поставщика. У меня была проблема с таймаутом, поэтому я изменил значение тайм-аута. Теперь кажется, что машина никогда не будет работать: я ждал, и ничего не происходит!Docker как поставщик для Vagrant

Это мой Vagrant файл:

Vagrant.configure(2) do |config| 

    config.vm.define :nodejs do |nodejs| 
    #nodejs.vm.box = "ubuntu/trusty64" 
    nodejs.vm.hostname = "nodejs" 
    nodejs.ssh.pty = true 

    nodejs.vm.boot_timeout = 50000 

    nodejs.vm.network "forwarded_port", guest: 80, host: 8001 
    nodejs.vm.network "forwarded_port", guest: 3600, host: 8002 
    nodejs.vm.network "private_network", ip: "10.0.0.10" 

    nodejs.vm.synced_folder "salt/roots/", "/srv/salt/" 
    nodejs.vm.synced_folder "salt/minion.d/", "/etc/salt/minion.d/" 
    nodejs.vm.synced_folder "salt/formulas/", "/srv/formulas/" 

    nodejs.vm.provider :virtualbox do |vb| 
     vb.gui = true 
    end 


    nodejs.vm.provision :salt do |salt| 
     salt.verbose = true 
     salt.minion_config = "salt/minion.yml" 
     salt.run_highstate = true 
     salt.colorize = true 
     salt.log_level = 'all' 
     salt.always_install = true 
     salt.colorize = true 
     salt.bootstrap_options = '-F -c /tmp/ -P' 
    end 

    nodejs.vm.provider "virtualbox" do |v| 
     v.customize ["modifyvm", :id, "--memory", "2048"] 
     v.customize ["modifyvm", :id, "--cpus", "2"] 
    end 

    nodejs.vm.provision "shell", path: "bootstrap/nodejs_bootstrap.sh" 


    nodejs.ssh.username = 'docker' 
    nodejs.ssh.password = 'tcuser' 


    nodejs.vm.provider :docker do |docker| 
     docker.force_host_vm = true 
     docker.has_ssh = true 
     docker.image = 'ubuntu' 
     docker.remains_running = false 
    end 






    end 
end 

Без Докер все работает нормально, пока я не добавил эту часть:

nodejs.ssh.username = 'docker' 
    nodejs.ssh.password = 'tcuser' 


    nodejs.vm.provider :docker do |docker| 
     docker.force_host_vm = true 
     docker.has_ssh = true 
     docker.image = 'ubuntu' 
     docker.remains_running = false 
    end 

аутентификации не работает, я обязан ввести пароль вручную при каждой синхронизации файлов! (Это не реальная проблема)

Это проблема:

$ vagrant up nodejs --provider docker 

Bringing machine 'nodejs' up with 'docker' provider... 
==> nodejs: Docker host is required. One will be created if necessary... 
    nodejs: Docker host VM is already ready. 
==> nodejs: Syncing folders to the host VM... 
    nodejs: The machine you're rsyncing folders to is configured to use 
    nodejs: password-based authentication. Vagrant can't script rsync to automatically 
    nodejs: enter this password, so you'll likely be prompted for a password 
    nodejs: shortly. 
    nodejs: 
    nodejs: If you don't want to have to do this, please enable automatic 
    nodejs: key insertion using `config.ssh.insert_key`. 
    nodejs: Rsyncing folder: /home/admin/vagrant_boxes/apiv2/salt/roots/ => /var/lib/docker/docker_1442333472_30184 
[email protected]'s password: 
    nodejs: Rsyncing folder: /home/admin/vagrant_boxes/apiv2/salt/minion.d/ => /var/lib/docker/docker_1442333472_90011 
[email protected]'s password: 
    nodejs: Rsyncing folder: /home/admin/vagrant_boxes/apiv2/salt/formulas/ => /var/lib/docker/docker_1442333472_52013 
[email protected]'s password: 
    nodejs: Rsyncing folder: /home/admin/vagrant_boxes/apiv2/ => /var/lib/docker/docker_1442333472_20273 
[email protected]'s password: 
==> nodejs: Warning: When using a remote Docker host, forwarded ports will NOT be 
==> nodejs: immediately available on your machine. They will still be forwarded on 
==> nodejs: the remote machine, however, so if you have a way to access the remote 
==> nodejs: machine, then you should be able to access those ports there. This is 
==> nodejs: not an error, it is only an informational message. 
==> nodejs: Creating the container... 
    nodejs: Name: apiv2_nodejs_1442333483 
    nodejs: Image: ubuntu 
    nodejs: Volume: /var/lib/docker/docker_1442333472_30184:/srv/salt 
    nodejs: Volume: /var/lib/docker/docker_1442333472_90011:/etc/salt/minion.d 
    nodejs: Volume: /var/lib/docker/docker_1442333472_52013:/srv/formulas 
    nodejs: Volume: /var/lib/docker/docker_1442333472_20273:/vagrant 
    nodejs: Port: 8001:80 
    nodejs: Port: 8002:3600 
    nodejs: Port: 127.0.0.1:2222:22 
    nodejs: 
    nodejs: Container created: 032bddad87adc9cb 
==> nodejs: Starting container... 
==> nodejs: Waiting for machine to boot. This may take a few minutes... 

Похоже, я буду ждать вечность!

Любые предложения?

Update:

Это выход отладки:

INFO ssh: SSH is ready! 
DEBUG ssh: Exit status: 0 
DEBUG ssh: Re-using SSH connection. 
INFO ssh: Execute: (sudo=false) 
DEBUG ssh: Exit status: 0 
DEBUG ssh: Re-using SSH connection. 
INFO ssh: Execute: echo -n "========== VAGRANT DOCKER BEGIN =========="; "docker" "ps" "-a" "-q" "--no-trunc" (sudo=false) 
DEBUG ssh: Re-using SSH connection. 
INFO ssh: Execute: echo -n "========== VAGRANT DOCKER BEGIN =========="; "docker" "ps" "-a" "-q" "--no-trunc" (sudo=false) 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive... 
DEBUG ssh: Sending SSH keep-alive.. 

ответ

0

Таким образом, вы делаете это:

docker.has_ssh = true 

Но ваше докер изображение не SSHd:

docker.image = 'ubuntu' 

Вы можете проверить что-то вроде этого:

~$ docker run -ti ubuntu /bin/bash 
[email protected]:/# sshd 
bash: sshd: command not found 
[email protected]:/# 

Вы должны создать тот, который имеет SSHd или использовать тот, который был создан с Dockerfile, который имеет SSHd установлен.

Также, как только вы видите проблему выше. Пробег:

docker ps 

Чтобы убедиться, что ваш контейнер работает. Если это не так, то проверить /var/log/docker.log файл

+0

в Dockerfile Я устанавливаю OpenSSH: 'RUN APT-получить установку -y OpenSSH-сервер RUN MkDir/уаг/запуска/SSHd' – 4m1nh4j1