我正在构建一个指向另一台服务器的简单代理。一切正常但我需要找到一种方法,能够在ClientBuilder中设置主机,最有可能使用Docker或某种配置文件。这就是我所拥有的:
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 :(得分:0)
您需要一个文件server.properties并将您的配置放在文件中:
HOST=host:8888
现在让docker用每个启动时用docker-entrypoint 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 "$@"
使用您的配置和命令&#34; proxy&#34;:
启动Docker$ docker run -e "HOST=host" -e "PORT=port" image proxy
当你不确定你的服务器容器ip地址时,你也可以进行链接:
$ docker run -e "HOST=mylinkhost" -e "PORT=port" --link myservercontainer:mylinkhost image proxy
答案 1 :(得分:0)
如果你想在docker容器中运行这个简单的代理并动态管理目标主机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
命令中添加以下参数来尝试启动docker容器:
-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
更改为目标主机。