2016-05-12 5 views
0

бегаю Drupal в качестве контейнера Докер в коробке boot2docker Vagrant (в ОС Windows 8.1):Vagrant SSH в Докер контейнер

Vagrantfile (мой Docker контейнер)

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    config.vm.provider "docker" do |docker| 
    docker.vagrant_vagrantfile = "host/Vagrantfile" 
    docker.image = "drupal" 
    docker.ports = ['80:80'] 
    docker.name = 'drupal-container' 
    end 
    config.vm.synced_folder ".", "/vagrant", type: "smb", disabled: true 
end 

хозяин/Vagrantfile (хост)

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    config.vm.hostname = "docker-host" 
    config.vm.box = "hashicorp/boot2docker" 
    config.vm.network "forwarded_port", guest: 80, host: 8080 
end 

Я просто называю vagrant up в директории моего Dock эр контейнер, чтобы запустить его (и хост):

$ vagrant up 
Bringing machine 'default' up with 'docker' provider... 
==> default: Docker host is required. One will be created if necessary... 
    default: Vagrant will now create or start a local VM to act as the Docker 
    default: host. You'll see the output of the `vagrant up` for this VM below. 
    default: 
    default: Importing base box 'hashicorp/boot2docker'... 
    default: Matching MAC address for NAT networking... 
    default: Checking if box 'hashicorp/boot2docker' is up to date... 
    default: Setting the name of the VM: boot2docker_default_1463064065066_29287 
    default: Clearing any previously set network interfaces... 
    default: Preparing network interfaces based on configuration... 
    default: Adapter 1: nat 
    default: Forwarding ports... 
    default: 2375 (guest) => 2375 (host) (adapter 1) 
    default: 80 (guest) => 8080 (host) (adapter 1) 
    default: 22 (guest) => 2222 (host) (adapter 1) 
    default: Running 'pre-boot' VM customizations... 
    default: Booting VM... 
    default: Waiting for machine to boot. This may take a few minutes... 
    default: SSH address: 127.0.0.1:2222 
    default: SSH username: docker 
    default: SSH auth method: password 
    default: Warning: Remote connection disconnect. Retrying... 
    default: Warning: Remote connection disconnect. Retrying... 
    default: Machine booted and ready! 
GuestAdditions versions on your host (5.0.20) and guest (4.3.28 r100309) do not match. 
The guest's platform ("tinycore") is currently not supported, will try generic Linux method... 
Copy iso file C:\Program Files/Oracle/VirtualBox/VBoxGuestAdditions.iso into the box /tmp/VBoxGuestAdditions.iso 
Installing Virtualbox Guest Additions 5.0.20 - guest version is 4.3.28 r100309 
mkdir: can't create directory '/tmp/selfgz98932600': No such file or directory 
Cannot create target directory /tmp/selfgz98932600 
You should try option --target OtherDirectory 
An error occurred during installation of VirtualBox Guest Additions 5.0.20. Some functionality may not work as intended. 
In most cases it is OK that the "Window System drivers" installation failed. 
    default: Setting hostname... 
==> default: Warning: When using a remote Docker host, forwarded ports will NOT be 
==> default: immediately available on your machine. They will still be forwarded on 
==> default: the remote machine, however, so if you have a way to access the remote 
==> default: machine, then you should be able to access those ports there. This is 
==> default: not an error, it is only an informational message. 
==> default: Creating the container... 
    default: Name: drupal-container 
    default: Image: drupal 
    default: Port: 80:80 
    default: 
    default: Container created: d12499a52f3d3f27 
==> default: Starting container... 
==> default: Provisioners will not be run since container doesn't support SSH. 

Теперь я хотел бы подключить к контейнеру из того же каталога:

$ vagrant ssh 
==> default: SSH will be proxied through the Docker virtual machine since we're 
==> default: not running Docker natively. This is just a notice, and not an error. 
==> default: The machine you're attempting to SSH into is configured to use 
==> default: password-based authentication. Vagrant can't script entering the 
==> default: password for you. If you're prompted for a password, please enter 
==> default: the same password you have configured in the Vagrantfile. 
[email protected]'s password: tcuser 
ssh: connect to host 172.17.0.1 port 22: Connection refused 
Connection to 127.0.0.1 closed. 

Почему соединение отказались? Неправильный пароль?

Я также пробовал использовать хэш окружающей среды. Я определил хэш от

$ vagrant global-status 
id  name provider state directory 
---------------------------------------------------------------------------------------------- 
e4da5ae default virtualbox running c:/my-project-path/host/boot2docker 
98ef037 default docker  running c:/my-project-path 

The above shows information about all known Vagrant environments 
on this machine. This data is cached and may not be completely 
up-to-date. To interact with any of the machines, you can go to 
that directory and run Vagrant, or you can use the ID directly 
with Vagrant commands from any directory. For example: 
"vagrant destroy 1a2b3c4d" 

и попытался соединить (такая же ошибка):

$ vagrant ssh 98ef037 
==> default: SSH will be proxied through the Docker virtual machine since we're 
==> default: not running Docker natively. This is just a notice, and not an error. 
==> default: The machine you're attempting to SSH into is configured to use 
==> default: password-based authentication. Vagrant can't script entering the 
==> default: password for you. If you're prompted for a password, please enter 
==> default: the same password you have configured in the Vagrantfile. 
[email protected]'s password: tcuser 
ssh: connect to host 172.17.0.3 port 22: Connection refused 
Connection to 127.0.0.1 closed. 

Если добавить к docker.has_ssh = trueVagrantfile (я запутался, нужно ли мне это, так как я могу позвонить vagrant ssh без него):

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    config.vm.provider "docker" do |docker| 
    docker.vagrant_vagrantfile = "host/Vagrantfile" 
    docker.image = "drupal" 
    docker.ports = ['80:80'] 
    docker.name = 'drupal-container' 
    docker.has_ssh = true 
    end 
    config.vm.synced_folder ".", "/vagrant", type: "smb", disabled: true 
end 

я можите запустить/перезагрузить мой контейнер, поскольку он ждет на неопределенное время для машины для загрузки :

$ vagrant reload 
==> default: Stopping container... 
==> default: Starting container... 
==> default: Waiting for machine to boot. This may take a few minutes... 
Timed out while waiting for the machine to boot. This means that 
Vagrant was unable to communicate with the guest machine within 
the configured ("config.vm.boot_timeout" value) time period. 

If you look above, you should be able to see the error(s) that 
Vagrant had when attempting to connect to the machine. These errors 
are usually good hints as to what may be wrong. 

If you're using a custom box, make sure that networking is properly 
working and you're able to connect to the machine. It is a common 
problem that networking isn't setup properly in these boxes. 
Verify that authentication configurations are also setup properly, 
as well. 

If the box appears to be booting properly, you may want to increase 
the timeout ("config.vm.boot_timeout") value. 

Так как я могу подключить к моему Докер контейнера с помощью vagrant ssh?

Примечание: я могу подключиться к хосту первым, а затем вызвать докер на нем

$ cd host 
$ vagrant ssh 
==> default: The machine you're attempting to SSH into is configured to use 
==> default: password-based authentication. Vagrant can't script entering the 
==> default: password for you. If you're prompted for a password, please enter 
==> default: the same password you have configured in the Vagrantfile. 
[email protected]'s password: tcuser 
         ##   . 
        ## ## ##  == 
       ## ## ## ## ## === 
      /"""""""""""""""""\___/ === 
     ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~/===- ~~~ 
      \______ o   __/ 
      \ \   __/ 
       \____\_______/ 
_     _ ____  _   _ 
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ 
| '_ \/_ \/_ \| __| __)/_` |/ _ \/__| |//_ \ '__| 
| |_) | (_) | (_) | |_/__/ (_| | (_) | (__| < __/ | 
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_| 
Boot2Docker version 1.7.0, build master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015 
Docker version 1.7.0, build 0baf609 
[email protected]:~$ sudo docker exec -t -i drupal-container /bin/bash 
[email protected]:/var/www/html# 

, но это непрактично обходной путь. Мне просто нравится называть vagrant ssh в каталоге контейнера для подключения к контейнеру (общий рабочий процесс Vagrant).

ответ

2

Вы запускаете контейнер-докер, а не виртуальную машину в качестве вашего провайдера, поэтому рабочий процесс бродяг разбит, поскольку вы не можете ssh в контейнер докеров.

Когда вы используете поставщика докеров, вы можете запустить свою команду, используя vagrant docker-run; см doc

Если вы работаете докер напрямую, вы не сможете напрямую SSH, есть некоторые hacks, чтобы обойти это, но бродяга как абстракции провайдера не может сделать это как простой ssh команды и его не официальной поддержка ,

Смежные вопросы