详解docker容器间通信的一种方法
以我的ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx做反向代理,将两个域名分别指向两个博客。
docker启动命令
ghost:
dockerrun-eNODE_ENV=production--nameghost1-v/path/to/data/ghost/ghost1/:/var/lib/ghost-dghost dockerrun-eNODE_ENV=production--nameghost2-v/path/to/data/ghost/ghost2/:/var/lib/ghost-dghost
nginx:
dockerrun-p80:80--namenginx--linkghost1--linkghost2-v/path/to/data/nginx/nginx.conf:/etc/nginx/nginx.conf-dnginx
先启动两个ghost,然后启动nginx。使用--link参数将容器“链接”到一起,此参数会在容器中加入环境变量并在/etc/hosts中插入一条容器名与IP的映射
root@fabfd4bacfda:/#cat/etc/hosts 172.17.0.3ghost1d19c0134011a 172.17.0.5ghost20e2e66ba70e0 172.17.0.4fabfd4bacfda
设置nginx反向代理
修改nginx.conf,在http段内添加如下内容
http{ server{ listen80; server_namewww.domain1.tkdomain1.tk; location/{ proxy_passhttp://ghost1:2368; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; } } server{ listen80; server_namewww.domain2.tkdomain2.tk; location/{ proxy_passhttp://ghost2:2368; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; } } }
注意proxy_pass的值proxy_passhttp://ghost2:2368;。ghost2是nginx容器/etc/hosts中的一条,是由--link参数添加进来的。
设置完这些后,nginx就会将两个域名的请求分别代理到两个博客中。
补充
容器重启后IP可能变化,所以直接在nginx.conf中指定IP并不是一个好方法。使用--link时hosts文件会随着容器IP的变化更新,所以使用域名才是更容易维护的方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。