# Docker的網路-Dockerfile網路寫法 參考:https://docs.docker.com/engine/reference/builder/#run---network 我們很多網路的設定都是在docker run時附加上去的,其實在image打包時就可以設定好,另外一個地方就是docker compose yaml。 這邊使用官方的範例改寫的方式,來練習Dockerfile帶入network的寫法 ``` FROM ubuntu RUN apt-get update \ && apt-get upgrade -y \ && apt-get install -y inetutils-ping curl dnsutils net-tools traceroute --no-install-recommends \ && rm -rf /var/lib/apt/lists/* RUN --network=intra CMD ["sh"] ``` 這是前幾個範例有提到tedyang/ubuntu:1120912的Dockerfile,只是增加了--network=intra,我們看會有什麼結果 > docker build -t tedyang/ubuntu:test1 . ![](https://hackmd.io/_uploads/HybcCAPJa.png) 為何在Dockerfile指定network會有錯誤呢,因為Dockerfile的network只能包none跟host。 就是沒有網路或是不對外的網路。 我們重新撰寫: ``` FROM ubuntu RUN apt-get update \ && apt-get upgrade -y \ && apt-get install -y inetutils-ping curl dnsutils net-tools traceroute --no-install-recommends \ && rm -rf /var/lib/apt/lists/* RUN --network=none CMD ["sh"] ``` ![](https://hackmd.io/_uploads/By2lyyOJT.png) 這次就成功了。 ![](https://hackmd.io/_uploads/S1yj1Jdkp.png) 這邊看到一個奇怪的現象,已經在包image宣告沒有網卡了,但為什麼還是有?這邊理解是在docker run時,network預設會上bridge,所以直接覆蓋了image的設定。 所以還是比較建議從docker compose yaml撰寫network的設定。