2015-10-15 83 views
0

/出版端口我有一個小的REST API在泊塢窗容器中運行:揭露從搬運工

[2015-10-15 10:47:05] INFO WEBrick 1.3.1 
[2015-10-15 10:47:05] INFO ruby 2.2.3 (2015-08-18) [x86_64-linux] 
[2015-10-15 10:47:05] INFO WEBrick::HTTPServer#start: pid=8 port=9292 

我有搬運工人VM上IP:

192.168.99.100 

我試圖發佈/揭露我端口:

docker run --publish 9292:9292 788a36b503e2 

泊塢ρs可表示:

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
9d6b34469ebf  788a36b503e2  "/bin/sh -c 'rackup -" 45 seconds ago  Up 44 seconds  0.0.0.0:9292->9292/tcp hopeful_bhaskara 

,我試圖打的REST API:

curl 192.168.99.100:9292/auth/3/xyz 

但仍然得到錯誤:

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

任何想法,爲什麼?由於更多

回答

1

在一天結束時,我從來沒有發現我做錯了什麼。我採取了不同的方法解決問題,並通過使用Forman和Thin解決了這個問題。

我Dockerfile:

FROM buildpack-deps:jessie 

ENV RUBY_MAJOR 2.2 
ENV RUBY_VERSION 2.2.3 
ENV RUBY_DOWNLOAD_SHA256 df795f2f99860745a416092a4004b016ccf77e8b82dec956b120f18bdc71edce 
ENV RUBYGEMS_VERSION 2.4.8 

# skip installing gem documentation 
RUN echo 'install: --no-document\nupdate: --no-document' >> "$HOME/.gemrc" 

# some of ruby's build scripts are written in ruby 
# we purge this later to make sure our final image uses what we just built 
RUN apt-get update \ 
    && apt-get install -y bison libgdbm-dev ruby \ 
    && rm -rf /var/lib/apt/lists/* \ 
    && mkdir -p /usr/src/ruby \ 
    && curl -fSL -o ruby.tar.gz "http://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR/ruby-$RUBY_VERSION.tar.gz" \ 
    && echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.gz" | sha256sum -c - \ 
    && tar -xzf ruby.tar.gz -C /usr/src/ruby --strip-components=1 \ 
    && rm ruby.tar.gz \ 
    && cd /usr/src/ruby \ 
    && autoconf \ 
    && ./configure --disable-install-doc \ 
    && make -j"$(nproc)" \ 
    && make install \ 
    && apt-get purge -y --auto-remove bison libgdbm-dev ruby \ 
    && gem update --system $RUBYGEMS_VERSION \ 
    && rm -r /usr/src/ruby 

# install things globally, for great justice 
ENV GEM_HOME /usr/local/bundle 
ENV PATH $GEM_HOME/bin:$PATH 

ENV BUNDLER_VERSION 1.10.6 

RUN gem install bundler --version "$BUNDLER_VERSION" \ 
    && bundle config --global path "$GEM_HOME" \ 
    && bundle config --global bin "$GEM_HOME/bin" 

# don't create ".bundle" in all our apps 
ENV BUNDLE_APP_CONFIG $GEM_HOME 

COPY app /auth_app 

WORKDIR /auth_app 

RUN bundle install 

CMD ["foreman","start","-d","/auth_app"] 

EXPOSE 4567 

我的Gemfile:

source 'https://rubygems.org' 

gem 'sinatra' 
gem 'foreman' 
gem 'nori' 
gem 'thin' 
gem 'rack' 
gem 'rack-test' 

我Procfile:

web: bundle exec rackup --env dev config.ru -p 4567 -s thin -o 0.0.0.0 

我的搬運工命令運行它:

docker run -p 4567:4567 -d auth_app 

我沒有更改應用程序內的任何代碼,只是docker部署設置,它像一個魅力那麼工作。感謝你的答案,他們至少幫助我把注意力集中在正確的問題上,並提出正確的問題來解決問題。

2


有點信息需要 -
你能捲曲本地主機:從內部容器9292?
如果是這樣,從運行容器的主機,你可以捲曲的URL(捲曲192.168.99.100:9292)?
如果是這樣,REST服務器可能關閉或錯誤配置。

您使用的是標準映像(來自Docker hub的d/l)嗎?如果是這樣 - 請發送鏈接,以便重新創建。

+0

所以我可以在容器內捲曲localhost:9292。我無法捲曲192.168.99.100:9292。不,我正在使用自定義圖像。 REST服務器配置正確。 –

4

你說:

I have docker VM on IP:

192.168.99.100

如果您在使用VirtualBox的VM,並要在本地計算機上訪問此網址(http://localhost:9292),你需要做的VirtualBox的端口轉發訪問虛擬機。

警告:如果您的VM有防火牆(如ufw),請將其禁用。 (sudo ufw disable

按照以下步驟進行端口轉發。

  1. 在本地計算機上打開VirtualBox GUI。

  2. 找到你的虛擬機在虛擬機的列表,並從頂部導航欄中選擇設置

  3. 單擊網絡圖標在頂部導航

  4. 選擇端口轉發

  5. 點擊在右上角添加規則圖標並填寫您的主機端口9292和您的訪客端口9292

  6. 單擊確定並確定,並設置轉發。

現在,您可以在本地計算機上訪問http://localhost:9292

+0

怎麼樣?你能詳細解釋一下你的答案嗎? –

0

如果您正在運行

docker run --publish 9292:9292 788a36b503e2 

您正在使用的主機上的同一端口綁定9292集裝箱港口。所以運行

curl localhost:9292/auth/3/xyz 

應該從主機上工作。

0

你的Dockerfile是什麼樣的?

您必須EXPOSE端口-pdocker run命令中的標誌。