2015-07-10 52 views
0

我正在構建一個簡單的代理來指向另一臺服務器。一切正常,但我需要找到一種方法,可以在外部最有可能使用Docker或某種配置文件來設置ClientBuilder中的主機。這裏是我有:使用Finagle的clientbuilder,我如何在外部設置主機?

import java.net.InetSocketAddress 
import com.twitter.finagle.Service 
import com.twitter.finagle.builder.{ServerBuilder, ClientBuilder} 
import com.twitter.finagle.http.{Request, Http} 
import com.twitter.util.Future 
import org.jboss.netty.handler.codec.http._ 

object Proxy extends App { 

    val client: Service[HttpRequest, HttpResponse] = { 
    ClientBuilder() 
    .codec(Http()) 
    .hosts("localhost:8888") 
    .hostConnectionLimit(1) 
    .build() 
    } 

    val server = { 
    ServerBuilder() 
     .codec(Http()) 
     .bindTo(new InetSocketAddress(8080)) 
     .name("TROGDOR") 
     .build(client) 
    } 
} 

如果你知道的方式做到這一點,或有任何想法吧,請讓我知道!

回答

0

,如果你想運行在一個碼頭工人集裝箱這個簡單的代理和動態管理目標主機的IP,您可以嘗試通過環境變量來傳遞目標主機的IP和改變你這樣的代碼

import java.net.InetSocketAddress 
import com.twitter.finagle.Service 
import com.twitter.finagle.builder.{ServerBuilder, ClientBuilder} 
import com.twitter.finagle.http.{Request, Http} 
import com.twitter.util.Future 
import org.jboss.netty.handler.codec.http._ 

object Proxy extends App { 
    val target_host = sys.env.get("TARGET_HOST") 

    val client: Service[HttpRequest, HttpResponse] = { 
    ClientBuilder() 
    .codec(Http()) 
    .hosts(target_host.getOrElse("127.0.0.1:8888")) 
    .hostConnectionLimit(1) 
    .build() 
    } 

    val server = { 
    ServerBuilder() 
     .codec(Http()) 
     .bindTo(new InetSocketAddress(8080)) 
     .name("TROGDOR") 
     .build(client) 
    } 
} 

這將讓你的代碼讀取系統環境變量TARGET_HOST。當你完成這個部分,你可以嘗試通過將下列參數添加到您的docker run命令來啓動你的搬運工容器:

-e "TARGET_HOST=127.0.0.1:8090"

例如docker run -e "TARGET_HOST=127.0.0.1:8090" <docker image> <docker command>

注意,你可以改變127.0.0.1:8090到目標主機。

+0

謝謝,這正是我所需要的! –

0

你需要一個server.properties的文件,把配置文件裏:

HOST=host:8888 

現在得到搬運工到與碼頭工人,入口點bash腳本,每次啓動時寫的配置。添加此腳本定義環境變量您Dockerfile內:

$ ENV HOST=myhost 
$ ENV PORT=myport 
$ ADD docker-entrypoint.sh /docker-entrypoint.sh 
$ ENTRYPOINT ["/docker-entrypoint.sh"] 
$ CMD ["proxy"] 

寫下你docker-entrypoint.sh:

#!/bin/bash -x 

set -o errexit 

cat > server.properties << EOF 
HOST=${HOST}:${PORT} 
EOF 

if [ "$1" = 'proxy' ]; then 
    launch server 
fi 

exec "[email protected]" 

啓動泊塢您的配置和命令 「代理」:

$ docker run -e "HOST=host" -e "PORT=port" image proxy 

當你不確定你的服務器容器IP地址時,你也可以做鏈接:

$ docker run -e "HOST=mylinkhost" -e "PORT=port" --link myservercontainer:mylinkhost image proxy