2017-02-14 37 views
0

我是碼頭工人。讓我描述一下我的場景: 我爲Web應用程序製作了2個docker鏡像。一個圖像是用於演示的前端Web圖層,另一個圖像是提供REST服務的後端圖層。如何在docker映像中創建一個非硬編碼的URL路徑來調用後端服務?

所以我需要運行這2個圖像的2個容器。前端在後端調用服務。現在我需要在前端的代碼中編寫後端的URL並構建映像...我認爲這不是微服務的正確方法...

因爲如果我的筆記本電腦的IP更改或其他想要使用我的圖像,他們無法獲得服務......那麼,如何才能讓URL變量,並使我的前端圖像可以用於其他人而無需重建?

Thx!

回答

0

您可以通過在運行Docker容器時將環境變量傳遞給Docker容器來完成此操作。

是這樣的:

docker run --name frontend -e MY_APP_BACKEND_IP="192.168.7.2" -e MY_APP_BACKEND_PORT="3000" ... 

而在後端,讓我們假設你正在使用的NodeJS,你可以這樣做:

var backend_ip = process.env.MY_APP_BACKEND_IP; 

注:不是的NodeJS親,但一些谷歌搜索告訴我如何去做

1

從Docker 1.10開始,您可以使用networking。它所做的是將docker容器的ip地址綁定到可以在容器中使用的主機名。

如果您使用docker-compose,則會自動創建一個網絡,並且這兩個服務可以相互通話。這裏是一個示例:

version: "2" 

services: 
    frontend: 
    image: nginx 
    networks: 
     - my-network 
    environment: 
     BACKEND_URL: "http://backend" 
    backend: 
    image: mariadb 
    networks: 
     - my-network 
    environment: 
     FRONTEND_URL: "http://frontend" 

networks: 
    my-network: 
    driver: bridge 

您可以在Getting started with multi-host networking可用here閱讀更多有關這也可以按照這樣的Composing Multi-container Networks with Docker Compose

+1

指導我想你的意思'BACKEND_URL:「HTTP://後端「' – Matt

+0

錯過了,謝謝@Matt – jrbeverly

+0

@jrbeverly非常感謝!通過這種方式我解決了我的問題! –

相關問題