Docker - 修复服务IP地址

时间:2015-11-05 13:00:50

标签: docker docker-compose

我有一个docker-compose设置,包含一堆后端服务(postgres,redis,...),一些应用程序(rails,node,...)和一个nginx。

使用docker env变量(例如DOCKERCOMPOSEDEMO_POSTGRES_1_PORT_5432_TCP_ADDR)将应用程序连接到数据库,并使用生成的/etc/hosts生成的docker将nginx连接到应用程序:(例如upstream nodeapp1-upstream { server dockercomposedemo_node_app1_1:3000; })< / p>

问题在于,每次重新启动某个服务时,它都会获得一个新的IP地址,因此它上面的所有内容都无法连接到它,因此重新启动rails应用程序需要重新启动nginx,然后重新启动数据库需要重启应用程序和nginx。

我做错了什么,或者是预期的行为?总是重新启动所有这些东西看起来不是一个好的解决方案。

谢谢

1 个答案:

答案 0 :(得分:2)

这是一种预期的行为,有很多方法可以避免重启依赖服务,我使用下一个approach

我使用下一种方法运行大多数与自己的静态ips绑定的dockerized服务:

  1. 我为docker host
  2. 上的所有服务创建ip别名
  3. 然后我运行每个服务将这个ip的端口重定向到容器中,这样每个服务都有自己的静态ip,可以被外部用户和其他容器使用。
  4. 样品:

    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
    ...
    
相关问题