2016-06-13 97 views
2

好的,我很新Docker世界。所以這可能是一個非常基本的問題。如何從主機連接到Docker上的服務器?

我有一個容器在運行RabbitMQ的Docker中運行。假設這個容器的名字是「兔子容器」。

RabbitMQ的容器啓動時使用這個命令:

docker run -d -t -i --name rmq -p 5672:5672 rabbitmq:3-management 

2個ARGS Python腳本命令:

python ~/Documents/myscripts/migrate_data.py amqp://rabbit:5672/ ~/Documents/queue/ 

現在,我從我的主機,它是創造一些一Python腳本消息。我想發送這些消息給我的「兔子容器」。因此我想從我的主機(Mac OSX)連接到這個容器。

這甚至可能嗎?如果是,如何?

請讓我知道是否需要更多細節。

+0

運行命令'docker run -d -t -i -name rmq -p 5672:5672 rabbitmq:3-management',更具體地說是選項'-p 5672:5672'請求Docker守護進程綁定你的主機-ip端口5672與容器端口5672.因此,如果你嘗試從主機到'nc 127.0.0.1 5672',你會看到連接到RabbitMQ插座的'nc'。您可以使用此套接字通過網絡本地堆棧與它進行通信。 – Auzias

回答

2

所以,我解決它通過簡單的映射RMQ監聽端口到主機OS:

docker run -d -t -i --name rmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management 

我以前只有-p 15672:15672在我的命令。這是將Admin UI從Docker容器映射到我的主機操作系統。我添加了-p 5672:5672,它將Docker容器中的RabbitMQ偵聽端口映射到主機操作系統。

1

如果你正在運行在您的本地系統OSX這個容器,那麼你應該通過運行找到您的默認泊塢窗機IP地址:

docker-machine ip default 

然後你就可以改變你的Python腳本指向的地址和映射端口<your_docker_machine_ip>:5672

這是因爲碼頭工人在OSX和Windows虛擬化引擎運行,所以當你的端口映射到主機,你實際上它映射到虛擬機。

+0

沒有工作。另外,直到現在,我還沒有運行「docker-machine」。爲什麼有必要? – Bhushan

+0

在官方的dockerhub圖片頁面https://hub.docker.com/_/rabbitmq/上說rabbitmq:3-management在端口15672上運行。停止你的容器,將其移除並再次運行,以便正確映射端口並通過'HTTP:// <搬運工機-IP>:15672'。在docker-machine上查看官方文檔以獲取更多信息https://docs.docker.com/machine/overview/ –

+0

@Bhushan當您運行docker-machine ls'時,'default'被列爲'running'?雖然在OSX上安裝docker時看不到'docker-machine',這就是boot2docker虛擬機的設置和管理方式(https://github.com/docker/toolbox/blob/fcdf7c37950dab9658556b1566b4363fa930878b/osx/) MPKG/quickstart.app /內容/資源/腳本/ start.sh)。 – Matt

0

你說你從來沒有使用過泊塢窗機,所以我假設你正在使用的泊塢測試版的Mac(你應該看到菜單欄頂部的泊塢窗圖標)。

您的docker運行命令爲兔子是正確的。如果你現在想連接到兔子,你有兩個選擇:

  1. 環繞你的Python腳本在新的容器中,並將其鏈接到兔:

    docker run -it --rm --name migration --link rmq:rabbit -v ~/Documents/myscripts:/app -w /app python:3 python migrate_data.py

    請注意,我們必須鏈接rmq:rabbit,因爲您將容器命名爲rmq,但在腳本中使用rabbit

  2. 你的主機和使用本地執行Python腳本:5672

    python ~/Documents/myscripts/migrate_data.py amqp://localhost:5672/ ~/Documents/queue/

+0

感謝您的意見。是的,我正在使用Docker Beta。我通過將RMQ偵聽端口映射到主機操作系統來解決了我的問題。我張貼我的發現作爲另一個答案。 – Bhushan

0

你需要與暴露的端口5672上運行的容器,或許15672,以及如果你想WebUI和5671(如果使用SSL),或者您在rabbitmq中爲其添加tcp偵聽器的任何其他端口。 如果您有rabbitmq容器的特定IP和主機名稱,這也會更容易。要做到這一點,你需要創建自己的搬運工網絡

docker network create --subnet=172.18.0.0/16 mynet123

之後啓動容器,像這樣

docker run -d --net mynet123--ip 172.18.0.11 --hostname rmq1 --name rmq_container_name -p 15673:15672 rabbitmq:3-management

注意,與rabbitmq:3-management圖像的端口5672是(很好,當時我用它)已經暴露,所以沒有必要這樣做。 --name是容器名稱,--hostname顯然是主機名。

所以現在,從您的主機,您可以連接到rmq1 rabbitmq服務器。

+0

感謝您的幫助。我通過將RMQ端口映射到主機操作系統來解決此問題。 – Bhushan

相關問題