2015-11-05 28 views
0

我有一個docker-compose安裝程序,它有一堆後端服務(postgres,redis,...),一些應用程序(rails,node,...)和一個nginx它。Docker - 修復服務IP地址

的應用在使用搬運工ENV變量(例如DOCKERCOMPOSEDEMO_POSTGRES_1_PORT_5432_TCP_ADDR)連接到所述數據庫和nginx的使用搬運工產生/etc/hosts連接到所述應用程序:(例如upstream nodeapp1-upstream { server dockercomposedemo_node_app1_1:3000; }

的問題是,每一次我重新啓動有些服務會得到一個新的IP地址,因此它上面的所有內容都無法再連接到它,所以重新啓動rails應用程序需要重新啓動nginx,重新啓動數據庫需要重新啓動應用程序和nginx。

我是在做一些錯誤的事,還是它的預期行爲?總是重新啓動所有這些東西看起來不是一個好的解決方案。

謝謝

回答

2

這是一個預期的行爲,有很多方法如何避免依賴服務重新啓動時,我使用的是未來approach

我跑我的大部分綁dockerized服務,以自己的靜態IPS使用下一個方法:

  1. 我搬運工主機上創建的所有服務IP別名
  2. 然後我運行的每個服務從該IP端口重定向到容器中,以便每個SE服務擁有自己的靜態IP,可以被外部用戶和其他容器使用。

樣品:

docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns 
docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry 
docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache 
docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror 
...