1

我有單獨的泊塢窗圖像運行兩個應用程序。首先暴露在端口3000:3000和第二4000:4000。第一個應用程序有一些資源,我想用第二個應用程序使用rest-client。啓用搬運工CORS的Rails應用其餘的客戶端

也許它與碼頭工人容器有問題。

下面是錯誤的:

  • 變量Errno ::在FilmsController#指數ECONNREFUSED

  • 無法打開TCP連接到本地主機:3000(拒絕連接 - 連接(2)「 localhost「port 3000)

//第一個應用:

  • 暴露資源上http://localhost:3000/movies
  • 是開放的其它網絡
  • 允許跨源請求用於第一應用

    module Movies 
        class Application < Rails::Application 
         config.web_console.whiny_requests = false 
    
         config.middleware.insert_before 0, Rack::Cors do 
         allow do 
          origins '*' 
          resource '*', :headers => :any, :methods => [:get, :post, 
          :options] 
         end 
        end 
        end 
    end 
    

    // SECOND

application.rb中文件應用:

  • 運行在端口:4000
  • 具有一個模型電影
  • 一個控制器

膠片型號:

class Film 
    require 'rest-client' 
    def self.all 
     RestClient.get 'localhost:3000/movies.json' 
    end 
end 

films_controller:

class FilmsController < ApplicationController 
    def index 
    render json: Film.all 
    end 
end 

因爲它是一個應用程序,所以一切正常。當我拆分爲兩個碼頭集裝箱時出現問題。我想一個容器阻止來自另一個的請求,但找不到解決方案。任何幫助將非常感激。

在默認情況下,一個單獨的網絡命名空間,其中包括取得自己的私人迴環接口(又名本地主機)是從每一個其他容器和主機分開

回答

0

每個搬運工容器中運行。要連接兩個容器,他們需要在同一個碼頭網絡上,然後只要該網絡不是名爲「bridge」(名稱,不是網絡驅動程序)的默認網絡,就可以使用其容器名稱。請注意,您不需要將容器的端口發佈或公開到容器網絡,只需要允許外部訪問容器即可。

所以,如果你正在使用docker run(否則你應該包括你的搬運工,撰寫。陽明海運),你會:

docker network create railsnet 
docker run --net railsnet --name=app1 ... 
docker run --net railsnet --name=app2 ... 

然後,如果APP1 3000端口的容器內聽,你可以從APP 2連接到APP1:3000/XYZ。

+0

謝謝你的answear。我已經啓動了容器,然後通過typipng將它們連接到網絡上:'docker network create railsnet''docker network connect railsnet app1'' docker network connect railsnet app2'但這不是解決方案 – elmuzyk

+0

請解釋爲什麼這不是一個解決方案,如果你遇到新的錯誤。 – BMitch

+0

錯誤仍然相同。我確信這個問題是一個'碼頭問題',因爲當我測試其他計算機上的應用程序時(沒有docker),一切正常。 – elmuzyk