2016-01-26 70 views
2

我有一個服務在碼頭集裝箱(本地機器)中運行。我可以在Ambari服務配置中看到服務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 

如何連接到外部容器內運行的服務?
在我的情況下,代碼在我的本地機器上執行。

+0

您是否使用容器的IP? ('docker-machine ip ') – VonC

+0

是的,當我在容器內嘗試它時沒有問題。但是,當我從我的MacOS終端嘗試時,我拒絕了連接。所以我的客戶端應用程序將在本地機器上運行而不是虛擬框 – nish1013

+0

然後嘗試端口轉發12008:http://stackoverflow.com/a/33448463/6309 – VonC

回答

1

如果你的容器已映射虛擬機12008端口上的端口,你需要確保你有口在你的VirtualBox的連接設置轉發12008,正如我在「How to connect mysql workbench to running mysql inside docker?

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

問題提需要更多的澄清,但我會回答一些假設。

我用了一個Ambari docker image(根據人氣來選擇這個)。 後來我開始3個集羣文提到的和我的amb-settingsdocker ps是這樣的:http://172.17.0.6:8080/

這工作也從我的主機:

[email protected]:~/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 
[email protected]:~/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 
[email protected]:~/tmp/docker-ambari$ 

截至目前,我可以通過訪問Ambari服務器。然而,如果你想要這從另一臺計算機從類似的網絡連接,那麼一個選項是有一個haproxy做重定向從: localhost:8080 - > 172.17.0.6:8080

所以,我創建如果我說localhost:8080MY_HOST_IP:8080我可以看到ambari服務器,這應該也是從工作電腦在同一網絡中

[email protected]:~/tmp/docker-ambari$ cat Dockerfile 
FROM haproxy:1.6 

COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg 
[email protected]:~/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 


[email protected]:~/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 
[email protected]:~/tmp/docker-ambari$ docker run -d -p 8080:8080 ambariproxy 
63dd026349bbb6752dbd898e1ae70e48a8785e792b35040e0d0473acb00c2834 

現在:小haproxy.cfgDockerfile實現這一目標。

希望我成功地回答你的問題:)

感謝,