2016-06-08 92 views
3

我嘗試創建一個開發環境,其中包含多個運行在生產環境中的微服務。Docker,獨立多軌實例

我想運行與Docker兩個rails applications,它們之間進行調用。

我知道我可以使用links,但有了這個,我總是必須將其中的一個作爲主人使用。這意味着,我只能調試這個,我想看看他們每個人的控制檯輸出。也許我做錯了什麼,這就是爲什麼我問。

這是我的搬運工,compose.yml文件:

rails-app-A: 
    build: . 
    dockerfile: "DockerfileA" 
    environment: 
    RAILS_ENV: development 
    links: 
    - db 
    command: bundle exec rails server -p 3005 -b '0.0.0.0' 
    volumes: 
    - ".:/home/app" 
    volumes_from: 
    - bundle 
    expose: 
    - "3005" 
    ports: 
    - "3005:3005" 

rails-app-B: 
    build: . 
    dockerfile: "DockerfileB" 
    environment: 
    RAILS_ENV: development 
    links: 
    - db 
    command: bundle exec rails server -p 3000 -b '0.0.0.0' 
    volumes: 
    - ".:/home/app" 
    volumes_from: 
    - bundle 
    expose: 
    - "3000" 
    ports: 
    - "3000:3000" 

這是我如何運行Rails應用程序:

​​

我總是得到這樣的錯誤,這些:

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 3000 

Errno::ECONNREFUSED (Failed to open TCP connection to localhost:3000 (Connection refused - connect(2) for "localhost" port 3000)) 

問題是,我可以通過瀏覽器訪問所有人。

隨着使用VirtualBox的OSX的Docker版本,這個工作正常(只是調用localhost:3000localhost:3005),但在Ubuntu或Docker-beta,失敗。

編輯

據我所知, 「localhost」 的鋼軌-APP-A是不同的服務器中軌-APP-B中 「localhost」 的,因爲它們運行不同的機器。當我有VirtualBox我可以訪問,因爲我有VirtualBox實例的IP(192.169.99.100)。

我現在使用http://localtunnel.me/,我可以訪問其他服務。但是,無論如何,有沒有更好的方法來做到這一點?

回答

0

最後,我實現使用external_link調用外部服務:

rails-app-A: 
    build: . 
    dockerfile: "DockerfileA" 
    environment: 
    RAILS_ENV: development 
    links: 
    - db 
    external_links: 
    - app_B 

    ...ommited lines... 

app_B應該運行的容器,以前像這樣執行:

docker-compose run --service-ports --name app_B rails-app-B 

添加此--name app_B使得它可以訪問使用這個名字。

我還是不明白的是如何在沒有以前打開rails-app-B的情況下使用rails-app-A。如果rails-app-A將rails-app-B作爲外部鏈接,並且在另一個方向發生同樣的情況,則builds變得難以管理。