簡體   English   中英

Boot2Docker:無法使端口轉發工作

[英]Boot2Docker: can't get ports forwarding to work

我在Windows 8.1上玩boot2docker(docker 1.6)。 我想讓自己的機器容器與ruby一起玩,我希望能夠從我的Windows主機連接到rails服務器。 首先從小步驟開始,我想從boot2docker VM連接到我的容器。 我在下面附上我的docker文件,它構建沒有問題,我可以從它運行一個容器。 我是這樣做的:

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機器上我做了agin

wget localhost:3000

得到

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

因此,似乎端口3000未正確轉發到boot2docker VM。 我做錯了什么? 我錯過了什么? 我廣泛搜索並嘗試了一些事情,比如從dockerfile明確暴露端口或添加-P開關來運行,但我總是以同樣的方式結束 - 它不起作用。

任何幫助將不勝感激。

更新02.05.2015

我也嘗試過Markus W Mahlberg的評論和VonC的回應。 我的VM配置似乎沒問題,我也檢查了VirtualBox的GUI,看起來很好。 更多信息:當我開始

boot2docker ssh -vnNTL 3000:localhost:3000

然后在我的Windows主機上打開localhost: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告訴我答案是空的。 從檢查容器上的日志,我知道請求永遠不會到達它。

更新結束

更新03.05.2015

我的問題與boot2docker或docker沒有太大關系,就像我的計算機配置一樣。 我已經多次使用docker / boot2docker配置了,我不太可能在那里犯錯誤。

我拼命地重新安裝了boot2docker和VirtualBox,仍然沒有任何影響。 任何想法如何調試我的配置可能出錯? 我只有其他想法是嘗試在另一台機器上做同樣的事情。 但即使這樣可行,我原來的問題也同樣令人討厭。

更新結束

這是我的dockerfile:

FROM ubuntu
MAINTAINER anonymous <anonymous@localhost.com>
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 "3dcreator.pl@gmail.com"
RUN ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa -C "3dcreator.pl@gmail.com"

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

請參閱Boot2docker變通辦法

您可以使用VBoxManage.exe命令在boot2docker VM級別上打開這些端口,以便您的實際VM主機可以訪問它們。
默認情況下,只打開端口2222,以便boot2docker ssh工作並打開交互式ssh boot2docker會話。
只需確保VirtualBox在您的PATH

  • VBoxManage modifyvm :當boot2docker VM尚未啟動時,或者在boot2docker stop
  • VBoxManage controlvm :在boot2docker start后運行boot2docker VM boot2docker start

假設您的Docker容器公開了端口8000,並且您希望從LAN上的其他計算機訪問它。 您可以使用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的計算機,從Machine菜單中選擇Settings (或在Mac上按Command - S ),選擇Network頂部的圖標,最后單擊Port Forwarding按鈕。

Windows(和OSX)上的boot2docker正在運行一個帶有Linux的VirtualBox VM。 默認情況下,它僅將ssh所需的端口暴露給VM。 您需要修改VM以使其暴露更多端口。

向VM添加端口更多的是關於配置VirtualBox而不是關於boot2docker(它是VM的屬性,而不是在其中運行的軟件)。 有關“端口轉發”和其他網絡配置,請參閱VirtualBox文檔。 https://www.virtualbox.org/manual/ch06.html

是的,您需要打開Virtualbox機器中的端口:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM