2016-11-29 36 views
8

如今我正在閱讀很多關於如何設置和運行碼頭堆棧的信息。但我總是錯過的其中一件事是如何設置特定的容器通過他們的域名響應訪問,而不僅僅是使用docker dns的容器名稱。如何將域名分配給碼頭中的容器

我的意思是,說我有一個微服務是從外部訪問,例如:users.mycompany.com,它會通過對微服務容器正在處理用戶API

後來,當我嘗試訪問customer-list.mycompany.com,它將進入處理客戶列表的微服務容器

當然,使用docker dns我可以訪問它們並將它們鏈接到docker網絡中,但是這個只有真正想要訪問容器到容器,但沒有互聯網到容器。

有誰知道我該怎麼做?或者最好的方法來設置。

回答

9

因此,您需要使用端口發佈的概念,以便您的容器中的端口可以通過主機的端口訪問。從Nginx上,將重定向到users.mycompany.com使用MYHOST此,您可以設置可以簡單proxy_pass:1337(假設你發佈你的端口1337

所以,如果你想這樣做,你需要設置你的容器以暴露某個端口使用:

docker run -d -p 5000:5000 training/webapp # publish image port 5000 to host port 5000 

然後你可以從你的主機捲曲localhost:5000來訪問容器。

curl -X GET localhost:5000 

如果你想安裝在前面的域名,你需要有一個網絡服務器實例,讓您proxy_pass您的主機名,您的容器。

在nginx的

即:

server { 
    listen 80; 
    server_name users.mycompany.com; 
    location/{ 
    proxy_pass http://localhost:5000; 
    } 
} 

我會建議你遵循this tutorial,也許檢查docker run reference

0

據我所知,碼頭工人不提供此功能的開箱。但是,這裏肯定有幾個解決方法。實際上,您需要在主機上部署DNS,以區分容器並在動態IP中解析其域名。所以你可以嘗試:

  1. 部署一些Docker感知的DNS解決方案(我建議你使用SkyDNSv1/SkyDock);

  2. 配置你的主機使用這個DNS(默認情況下,SkyDNS使容器相互知道名字,但主機不知道它);

  3. 有明確--hostname運行您的容器(你可能會使用方案container_name.image_name.dev.skydns.local)

您可以跳過第2步和運行容器裏面你的瀏覽器太:它將通過主機名發現Web應用程序容器。

相關問題