2016-03-22 83 views
-1

我正在使用多機器Vagrant設置,其中一個VM是運行一些使用自定義Dockerfiles構建的容器的碼頭主機。是否可以將Docker端口映射設置爲Dockerfile中的主機?

容器的每一個都是不同的,並將一些端口暴露給主機。我可以直接在Dockerfile中強制執行端口映射,而不必使用docker run -p命令設置映射嗎?

例如,在Dockerfile我:

EXPOSE 8080 

如果我docker run -P運行容器,搬運工發表在主機(這是無用的在我的具體情況)一個隨機端口上的8080端口。我是否可以強制docker在主機上的指定Y端口上發佈X端口,而無需運行自定義的docker run -p Y:X命令?

+0

答案是否定的。 – Auzias

+0

您的部署腳本可以檢查映像的端口並將必要的-p選項傳遞給運行命令。 –

+0

@IgorBukanov:但我正在使用Vagrant中的Docker provisioner,它有一個直接的「docker run」方法。添加執行所需操作的部署腳本會使Vagrant的便利性無效。 –

回答

0

這不是無用的,它是由設計。您可以同時運行多個容器。如果映射是dockerfile的一部分,您將a)無法控制如何跨羣隊管理此端口(負載均衡器)b)嘗試綁定到同一主機端口的多個實例發生衝突c)一堆其他問題。

答案是否定的。

+0

我的意思是在我的具體情況下「無用」。顯然,隨機端口在其他情況下很有用。在我的Vagrant/Docker部署中,問題是我無法事先知道容器將綁定到哪個端口,並且我無法在網絡已經設置的情況下擁有Vagrantfile。 –

0

docker run --net=host ...可能解決您的問題,但通常是不可能的。

相關問題