2016-07-28 96 views
1

我試圖使運行從我啓動它在目錄中的Rails應用程序的簡單泊塢窗容器訪問。Rails應用程序泊塢窗容器不能從Windows主機

一切似乎都很正常,當我運行的容器除外並嘗試從我的Windows主機在Docker Machine提供的IP地址訪問它,它會以拒絕連接錯誤消息的方式響應。

我甚至使用Nginx Dockerfile作爲參考,因爲Nginx Dockerfile實際上構建了一個可供我訪問的容器。

這裏是我的Dockerfile至今:

FROM ruby:2.3.1 

RUN gem install rails && \ 
apt-get update -y && \ 
apt-get install -y nodejs 


VOLUME ["/web_app"] 
ADD . /web_app 
WORKDIR /web_app 

RUN bundle install 

CMD rails s -p 80 

EXPOSE 80 

我使用這個命令

docker build -t rails_server . 
構建映像

我然後使用這個命令

docker run -d -p 80:80 rails_server 

而且這裏是運行我嘗試訪問網頁:

curl $(docker-machine ip) 

而且這是我得到的結果:

curl: (7) Failed to connect to 192.168.99.100 port 80: Connection refused 

,這是它如何讓我覺得:

enter image description here

回答

2

這裏的問題似乎是,該應用程序被監聽127.0.0.1:80,所以該服務將不接受來自容器外部的連接。你能否檢查一下修改rails server是否可以解決問題的0.0.0.0?

你可以做到這一點使用-b標誌rails s

FROM ruby:2.3.1 

RUN gem install rails && \ 
apt-get update -y && \ 
apt-get install -y nodejs 


VOLUME ["/web_app"] 
ADD . /web_app 
WORKDIR /web_app 

RUN bundle install 

CMD rails s -b 0.0.0.0 -p 80 

EXPOSE 80 
+0

太棒了,可以工作。但我不明白爲什麼。例如,當我進行更多的Rails開發時,我可以像平常一樣啓動應用程序,同事可以使用我的LAN IP(192.168.xxx.xxx)從機器上啓動它。我覺得我應該能夠從我的主機連接到我的docker虛擬機,就像另一臺計算機可以在局域網上連接到我一樣。 – arjabbar

0

端口只露出裏面運行的泊塢窗的VM。您還必須將vm的端口80暴露給本地計算機,以便它可以連接到本地計算機。我認爲最好的辦法是讓你的容器在7070之類的可選端口上被監聽,然後使用一個簡單的nginx代理服務器將內容提供給外部(監聽端口80)