docker容器間通信的一種方法

jcyf8659 7年前發布 | 19K 次閱讀 Docker

以我的ghost博客為例進行說明,我在VPS上用docker啟動了兩個ghost博客,還有一個Nginx做反向代理,將兩個域名分別指向兩個博客。

docker啟動命令

ghost:

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

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

先啟動兩個ghost,然后啟動nginx。使用--link參數將容器“鏈接”到一起,此參數會在容器中加入環境變量并在 /etc/hosts 中插入一條容器名與IP的映射

root@fabfd4bacfda:/# cat /etc/hosts
172.17.0.3      ghost1 d19c0134011a
172.17.0.5      ghost2 0e2e66ba70e0
172.17.0.4      fabfd4bacfda

設置nginx反向代理

修改 nginx.conf ,在http段內添加如下內容

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;
        }
    }

}

注意 proxy_pass 的值 proxy_pass http://ghost2:2368; 。 ghost2是nginx容器 /etc/hosts 中的一條,是由--link參數添加進來的。

設置完這些后,nginx就會將兩個域名的請求分別代理到兩個博客中。

補充

容器重啟后IP可能變化,所以直接在nginx.conf中指定IP并不是一個好方法。使用--link時hosts文件會隨著容器IP的變化更新,所以使用域名才是更容易維護的方法。

 

來自:https://segmentfault.com/a/1190000008223744

 

 本文由用戶 jcyf8659 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!