2015-05-01 2 views
3

Я играю с boot2docker (docker 1.6) на окнах 8.1. Я хотел сделать себе контейнер для машины, чтобы играть с рубином, и я хочу иметь возможность подключиться к серверу rails с моего хоста Windows. Для начала с небольшими шагами сначала я хочу подключиться к моему контейнеру из моей загрузочной виртуальной машины. Я прикрепляю файл докеры ниже, он строит без проблем, и я могу запустить контейнер из него. Я делаю это так:Boot2Docker: не удается переправить порты для работы

docker run -it -p 3000:3000 3564860f7afd /bin/bash 

Тогда в этом контейнере я говорю:

cd ~/myapp && bundle exec rails server -d 

И чтобы увидеть, если все работает я:

~/myapp$ sudo apt-get install wget && wget localhost:3000 

и я получаю HTTP 500, это нормально, я просто хотел проверить, работает ли сервер. Затем я выхожу с помощью ctrl + p, ctrl + q. Но тогда на boot2docker машине я Агинского

wget localhost:3000 

и получить

Connecting to localhost:3000 (127.0.0.1:3000) 
wget: error getting response: Connection reset by peer 

Так что, похоже, как порт 3000 не корректно перенаправлены на boot2docker VM. Что я сделал не так? Что я упустил? Я много раз искал Google и пробовал пару вещей, таких как явное раскрытие порта из файла docker или добавление переключателя -P для запуска, но я всегда заканчиваю тем же способом - он не работает.

Любая помощь будет принята с благодарностью.

UPDATE 02.05.2015

Я также попытался вещи, описанные в комментарии от Markus W Mahlberg и réponse от VonC. Моя конфигурация VM, похоже, в порядке, я также проверил в GUI VirtualBox, и это кажется прекрасным. Некоторые подробнее: Когда я начинаю

boot2docker ssh -vnNTL 3000:localhost:3000 

, а затем откройте локальный: 3000 на моем окна хозяина я вижу в следовых бревен в boot2docker консоли, то они выглядят так:

debug1: channel 1: free: direct-tcpip: listening port 3000 for localhost port 3000, connect from 127.0.0.1 port 50512 to 127.0.0.1 port 3000, nchannels 3 

Chrome говорит мне, что ответ был пуст. От проверки журналов на контейнере я знаю, что запрос так и не дошел до него.

Конец обновления

Update 03.05.2015

я вещь, что моя проблема не так много, чтобы сделать с boot2docker или грузчиком, как с моей конфигурации компьютера. Я много раз над своей конфигурацией docker/boot2docker, что маловероятно, что я совершил ошибку там.

Отчаянно я переустановил boot2docker и VirtualBox, все равно никаких эффектов. Любые идеи отладки, что может быть неправильным в моей конфигурации? Только другая идея - попробовать сделать то же самое на другой машине. Но даже если это работает, моя оригинальная проблема не менее раздражает.

Конец обновления

Вот мой dockerfile:

FROM ubuntu 
MAINTAINER anonymous <[email protected]> 
LABEL Description="Ruby container" 
# based on https://gorails.com/setup/ubuntu/14.10 
RUN apt-get update 
RUN apt-get -y upgrade 
RUN apt-get -y install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev 

RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ 
    && groupadd anonymous \ 
    && useradd anonymous -m -g anonymous -g sudo 
ENV HOME /home/anonymous 
USER anonymous 

RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc 
RUN echo 'eval "$(rbenv init -)"' >> ~/.bashrc 
RUN exec $SHELL 

RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build 
RUN echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc 
RUN exec $SHELL 
RUN git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash 

ENV PATH "$HOME/.rbenv/bin:$HOME/.rbenv/plugins/ruby-build/bin:$PATH" 

RUN rbenv install 2.2.1 
RUN rbenv global 2.2.1 

ENV PATH "$HOME/.rbenv/shims:$PATH" 

RUN echo 'gem: --no-ri --no-rdoc' > ~/.gemrc 
RUN gem install bundler 

RUN git config --global color.ui true 
RUN git config --global user.name "mindriven" 
RUN git config --global user.email "[email protected]" 
RUN ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -C "[email protected]" 

RUN sudo apt-get -qy install software-properties-common python-software-properties 
RUN sudo add-apt-repository ppa:chris-lea/node.js 
RUN sudo apt-get -y install nodejs 

RUN gem install rails -v 4.2.0 
RUN ~/.rbenv/bin/rbenv rehash 
RUN rails -v 

RUN sudo apt-get -qy install mysql-server mysql-client 
RUN sudo apt-get install libmysqlclient-dev 
RUN rails new ~/myapp -d mysql 
RUN sudo /etc/init.d/mysql start && cd ~/myapp && rake db:create 
+0

Эти порты открыты только для виртуальной машины, на которой запущен демон докеров. Подробнее см. Http://acaird.github.io/computers/2014/11/16/docker-virtualbox-host-networking/. –

+0

@MarkusWMahlberg спасибо за ссылку, но я все это делал раньше. Еще есть шанс, что я сделал что-то не так, но я понятия не имею, что. Я вижу, что кажется правильной конфигурацией в графическом интерфейсе VM после настройки перенаправления портов. – mindriven

ответ

1

boot2docker на Windows (и OSX) работает под управлением VirtualBox VM с Linux в нем. По умолчанию он предоставляет только порты, необходимые для ssh в VM. Вам нужно будет изменить виртуальную машину, чтобы она отображала больше портов.

Добавление портов в виртуальную машину - это больше о настройке VirtualBox и о загрузке boot2docker (это свойство VM, а не программное обеспечение, запущенное внутри него). См. Документацию VirtualBox для «переадресации портов» и другой конфигурации сети. https://www.virtualbox.org/manual/ch06.html

3

См Boot2docker workarounds:

Вы можете использовать VBoxManage.exe команды, чтобы открыть эти порты на boot2docker уровне VM, для того, чтобы ваш фактический хост VM для доступа к ним.
По умолчанию открыт только порт 2222, для работы boot2docker ssh и открытия интерактивной сессии ssh boot2docker.
Просто убедитесь, что VirtualBox находится в вашем PATH.

  • VBoxManage modifyvm: работает, когда boot2docker VM еще не началась, или после boot2docker stop,
  • VBoxManage controlvm: работает, когда boot2docker VM работает, после boot2docker start.

Допустим, ваш контейнер Docker выставляет порт 8000, и вы хотите получить доступ к нему с других компьютеров в вашей локальной сети. Вы можете сделать это временно, используя SSH:

Выполнить следующую команду (и держать его открытым):

$ boot2docker ssh -vnNTL 8000:localhost:8000 

или вы можете настроить постоянную переадресацию портов VirtualBox NAT:

$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,8000,,8000"; 

Если vm уже запущен, вы должны запустить эту другую команду:

$ VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port8000,tcp,,8000,,8000"; 

Теперь вы можете получить доступ к емкости с хост-машины под

localhost:8000 

Таким образом, вам не придется возиться с VirtualBox GUI, выбирая компьютер boot2docker-vm из списка слева, выбрав Settings из меню Machine (или нажмите Команда - S на Mac), выбрав значок Network в верхней части экрана и, наконец, нажав кнопку Port Forwarding.

+0

Спасибо, что ответили. То, что вы суммируете в своем ответе, более или менее то, что я пробовал до сих пор. Когда я запускаю «boot2docker ssh -vnNTL 3000: localhost: 3000», а затем открываю localhost: 3000 на моем хосте Windows, я вижу в консольных журналах трассировки, например: «debug1: channel 1: free: direct-tcpip: прослушивающий порт 3000 для порта localhost 3000, подключитесь с 127.0.0.1 порт 50512 до 127.0.0.1 порт 3000, nchannels 3 '. Хром говорит мне, что ответ был пуст. От проверки журналов на контейнере я знаю, что запрос так и не дошел до него. Есть ли способ отладить это? – mindriven

+0

@mindriven попробуйте 'boot2docker stop' и команду' modifyvm' с правильным портом. Затем запускается простой запуск boot2docker. – VonC

+0

Я сделал это (сейчас снова, что похоже на 7-й раз). Я проверяю, правильно ли была добавлена ​​конфигурация с использованием VirtualBox GUI. Нет эффекта. Я думаю, что я правильно установил свой boot2docker, но, похоже, что-то на моей машине, что не позволяет мне видеть эффекты. Любые идеи, что я должен проверить? – mindriven

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