从外部连接到在docker集装箱内运行的服务

我有一个在Docker容器(本地机器)中运行的服务。 我可以在Ambari服务configuration中看到服务URL。

现在我想使用我的本地开发环境连接到该服务。

我发现我可以连接到容器内,但是当我在我的本地使用该URL以外,我得到连接拒绝。

Cause: org.apache.http.conn.HttpHostConnectException: Connect to xx.xx.xx.com:12008 [xx.xx.xx.com/195.169.98.101] failed: Connection refused 

如何从外部连接到在容器内运行的服务?
在我的情况下代码在我的本地机器执行。

如果你的容器在VM 12008端口上映射了它的端口,你需要确保你的端口已经在你的VirtualBox连接设置中转发了12008,正如我在“ 如何将mysql工作台连接到在docker中运行mysql?

 VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port12008 ,tcp,,12008,,12008" VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port12008 ,udp,,12008,,12008" 

这个问题需要更多的澄清,但我会回答一些假设。

我使用Ambari 泊坞窗图像 (根据stream行度随机select)。 然后我开始提到3个集群,我的amb-settingsdocker ps是这样的:

 anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ amb-settings NODE_PREFIX=amb CLUSTER_SIZE=3 AMBARI_SERVER_NAME=amb-server AMBARI_SERVER_IMAGE=hortonworks/ambari-server:latest AMBARI_AGENT_IMAGE=hortonworks/ambari-agent:latest DOCKER_OPTS= AMBARI_SERVER_IP=172.17.0.6 CONSUL=amb-consul CONSUL_IMAGE=sequenceiq/consul:v0.5.0-v6 EXPOSE_DNS=false DRY_RUN=false anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d2483a74d919 hortonworks/ambari-agent:latest "/usr/sbin/init syste" 20 minutes ago Up 20 minutes amb2 4acaec766eaa hortonworks/ambari-agent:latest "/usr/sbin/init syste" 21 minutes ago Up 20 minutes amb1 47e9419de59f hortonworks/ambari-server:latest "/usr/sbin/init syste" 21 minutes ago Up 21 minutes 8080/tcp amb-server 548730bb1824 sequenceiq/consul:v0.5.0-v6 "/bin/start -server -" 22 minutes ago Up 22 minutes 53/tcp, 53/udp, 8300-8302/tcp, 8400/tcp, 8301-8302/udp, 8500/tcp amb-consul 27c725af6531 sequenceiq/ambari "/usr/sbin/init" 23 minutes ago Up 23 minutes 8080/tcp awesome_tesla anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ 

截至目前,我可以通过访问Ambari服务器: http ://172.17.0.6: 8080/

这也适用于我的主机。 但是,如果你想从另一台类似的networking上连接这台计算机,那么有一个select是使用haproxy来进行redirect:localhost:8080 – > 172.17.0.6:8080

所以,我创build了一个小的haproxy.cfgDockerfile来实现这个function:

 anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ cat Dockerfile FROM haproxy:1.6 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ cat haproxy.cfg frontend localnodes bind *:8080 mode http default_backend ambari backend ambari mode http server ambari-server 172.17.0.6:8080 check anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ docker build --rm -t ambariproxy . Sending build context to Docker daemon 9.635 MB Step 1 : FROM haproxy:1.6 ---> af749d0291b2 Step 2 : COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ---> Using cache ---> 60cdd2c7bb05 Successfully built 60cdd2c7bb05 anovil@anovil-Latitude-E6440:~/tmp/docker-ambari$ docker run -d -p 8080:8080 ambariproxy 63dd026349bbb6752dbd898e1ae70e48a8785e792b35040e0d0473acb00c2834 

现在,如果我说本地主机:8080或MY_HOST_IP:8080我可以看到ambari服务器,这也应该从同一networking中的计算机工作。

希望我设法回答你的问题:)

谢谢,