2016-09-15 42 views
0

Difference between "expose" and "publish" in docker這篇文章描述了3個不同的選項,以暴露端口:如何暴露EXPOSE中定義的端口,而不通過CLI選項明確設置端口?

如果不指定[EXPOSE-p],在容器 服務將無法訪問任何地方,除了從容器 自身內部。

如果EXPOSE端口,在容器中的服務是無法訪問的 從泊塢窗外面,而是從其他Docker容器內。所以這個 適合於集裝箱間通信。

如果你的EXPOSE-p是一個端口,在任何地方,即使在Docker之外,容器中的服務都是 。

如果我在Dockerfile中定義了EXPOSE,並且希望容器將這些端口公開給主機,該怎麼辦?

示例:

如果我有以下Dockerfile。

FROM node:6 

# ... 

CMD node ./dist/bin/server.js 

EXPOSE 8001 
EXPOSE 8002 

,我跑docker run,我想映射到被設置8001:80018002:8002

但是,我需要這樣做,而不使用-p選項對端口值進行硬編碼。

用例:

從基於VM部署系統遷移到基於泊塢窗部署系統。每個Docker容器都在其自己的VM中運行。因此,不會與其他服務發生衝突。

+0

是的,這仍然是一個問題,我想。你可以考慮使用'docker-compose' – n2o

回答

0

要映射到特定的端口,就像您要求的,必須使用-p PORT:PORT選項。

另一種選擇是使用-P發佈所有端口,然後docker將隨機分配從32700範圍內開始的端口到由圖像定義的各個端口。

+1

我已經在原始問題中描述了這些選項。它不回答這個問題。 – Gajus

0

解決了我的問題有點

docker run $(cat Dockerfile | grep EXPOSE | sed -n 's/EXPOSE \([0-9]*\)/-p \1:\1/p' | tr '\n' ' ') app 
相關問題