docker容器间通信的一种方法

jcyf8659 8年前
   <p>以我的ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx做反向代理,将两个域名分别指向两个博客。</p>    <p>docker启动命令</p>    <p>ghost:</p>    <pre>  <code class="language-nginx">docker run -e NODE_ENV=production --name ghost1 -v /path/to/data/ghost/ghost1/:/var/lib/ghost -d ghost  docker run -e NODE_ENV=production --name ghost2 -v /path/to/data/ghost/ghost2/:/var/lib/ghost -d ghost</code></pre>    <p>nginx:</p>    <pre>  <code class="language-nginx">docker run -p 80:80 --name nginx --link ghost1 --link ghost2 -v /path/to/data/nginx/nginx.conf:/etc/nginx/nginx.conf -d nginx</code></pre>    <p>先启动两个ghost,然后启动nginx。使用--link参数将容器“链接”到一起,此参数会在容器中加入环境变量并在 /etc/hosts 中插入一条容器名与IP的映射</p>    <pre>  <code class="language-nginx">root@fabfd4bacfda:/# cat /etc/hosts  172.17.0.3      ghost1 d19c0134011a  172.17.0.5      ghost2 0e2e66ba70e0  172.17.0.4      fabfd4bacfda</code></pre>    <p>设置nginx反向代理</p>    <p>修改 nginx.conf ,在http段内添加如下内容</p>    <pre>  <code class="language-nginx">http {      server {          listen 80;          server_name www.domain1.tk domain1.tk;            location / {              proxy_pass http://ghost1:2368;              proxy_redirect     off;              proxy_set_header   Host             $host;              proxy_set_header   X-Real-IP        $remote_addr;              proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;          }      }      server {          listen 80;          server_name www.domain2.tk domain2.tk;            location / {              proxy_pass http://ghost2:2368;              proxy_redirect     off;              proxy_set_header   Host             $host;              proxy_set_header   X-Real-IP        $remote_addr;              proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;          }      }    }</code></pre>    <p>注意 proxy_pass 的值 proxy_pass http://ghost2:2368; 。 ghost2是nginx容器 /etc/hosts 中的一条,是由--link参数添加进来的。</p>    <p>设置完这些后,nginx就会将两个域名的请求分别代理到两个博客中。</p>    <p>补充</p>    <p>容器重启后IP可能变化,所以直接在nginx.conf中指定IP并不是一个好方法。使用--link时hosts文件会随着容器IP的变化更新,所以使用域名才是更容易维护的方法。</p>    <p> </p>    <p>来自:https://segmentfault.com/a/1190000008223744</p>    <p> </p>