Docker – 修复服务IP地址
我有一个docker-compose设置,包含一些后端服务(postgres,redis,…),一些应用程序(rails,node,…)和一个nginx。
使用DOCKERCOMPOSEDEMO_POSTGRES_1_PORT_5432_TCP_ADDR
envvariables(例如DOCKERCOMPOSEDEMO_POSTGRES_1_PORT_5432_TCP_ADDR
)将应用程序连接到数据库,并使用DOCKERCOMPOSEDEMO_POSTGRES_1_PORT_5432_TCP_ADDR
生成的/etc/hosts
将nginx连接到应用程序(例如, upstream nodeapp1-upstream { server dockercomposedemo_node_app1_1:3000; }
)
问题是,每次我重新启动一些服务时,它会得到一个新的IP地址,因此它上面的所有东西都不能再连接到它了,所以重新启动一个rails应用程序需要重新启动nginx,重新启动一个数据库需要重启应用程序和nginx。
我做错了什么,还是它的目的? 总是重新启动所有的东西看起来不是一个好的解决scheme。
谢谢
这是一个预期的行为,有很多方法如何避免依赖服务的重启,我正在使用下一个方法 :
我使用下面的方法运行与自己的静态ips关联的大部分dockerized服务:
- 我为docker主机上的所有服务创buildip别名
- 然后我运行每个服务redirect端口从这个IP到容器,所以每个服务都有自己的静态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 ...