今天在試時 docker compose 發現host 重開機之後,下指令啟動,但卻無法啟動。
C:\web>docker-compose.exe start
Starting proxy ... error
Starting site1 ... error
Starting site2 ... error
ERROR: for proxy Cannot start service proxy: network 02fda54dd66e8782205ee417e901b198279abd40f74b2ffd970fcabc336db8eb not found
ERROR: No containers to start
看起來是找不到network。 真是見鬼了,用network ls 一看,真的不見了。
C:\web>docker network ls
NETWORK ID NAME DRIVER SCOPE
202191da323c nat nat local
6f2b7ad221fe none null local
後來才想起來 windows server 2019 重開機之後不會保留 driver 為 nat 的 network。
另一個悲傷的故事
既然 start 的指令無法啟動,那 up 指令會怎樣呢?
C:\web>docker-compose.exe up -d
Creating network "web_lan" with driver "nat"
Starting proxy ... error
ERROR: for proxy Cannot start service proxy: network 02fda54dd66e8782205ee417e901b198279abd40f74b2ffd970fcabc336db8eb not found
ERROR: Encountered errors while bringing up the project.
看到第一行輸出時,心裡還 “耶” 了一下,結果第二行就…
這個也很奇怪,明明network建起來了,但是找不到??? 一整個黑人問號
用network ls看,還真的有建起來
C:\web>docker network ls
NETWORK ID NAME DRIVER SCOPE
88d33743ebc0 web_lan nat local
202191da323c nat nat local
6f2b7ad221fe none null local
仔細一看network id ,原來不一樣了。 哇哩!! 新建的network id不一樣, 但是docker不會自動使用新的但是同名的network!!!
那…全部刪掉再建總可以了吧!!
docker-compose down
docker-compose up -d
總算建起來了。
但是只能這樣解嗎? 底下是我的 docker-compose.yml
version: '3.7'
services:
proxy:
image : proxy
container_name: proxy
restart: always
networks:
lan:
ports:
- "80:80"
site1:
image : web
container_name: site1
ports:
- "8000:80"
networks:
lan:
depends_on:
- "proxy"
restart: always
site2:
image : web
container_name: site2
ports:
- "8001:80"
networks:
lan:
depends_on:
- "proxy"
restart: always
networks:
lan:
driver: nat
lan 這個network是跟著docker compose一起建起來的。 那不要一起建,先在外面建好總可以吧!!
底下是修改過的 docker-compose.yml
version: '3.7'
services:
proxy:
image : proxy
container_name: proxy
restart: always
networks:
lan:
ports:
- "80:80"
site1:
image : web
container_name: site1
ports:
- "8000:80"
networks:
lan:
depends_on:
- "proxy"
restart: always
site2:
image : web
container_name: site2
ports:
- "8001:80"
networks:
lan:
depends_on:
- "proxy"
restart: always
networks:
lan:
external:
name: nat
建立一個network 叫lan,連結到外部現有的network叫 “nat” 。
#新建時就不會建立新的network
C:\web>docker-compose up -d
Creating proxy ... done
Creating site1 ... done
Creating site2 ... done
#移除時,docker會發現是外部的network然後就略過
C:\web>docker-compose down
Removing site2 ... done
Removing site1 ... done
Removing proxy ... done
Network nat is external, skipping
沒有留言:
張貼留言