Docker ลืม mount volume ข้อมูลหายจริงหรือ?
วันก่อน dev งานใน local (เครื่องตัวเอง) ก็คือมี setup env สำหรับ dev ขึ้นมาอย่างพวก mysql , mongo บลาๆ แต่... เผลอไปลบ container ทิ้ง ลืม mount volume ข้อมูลหายจริงหรือ?
ใช่ครับมันยังไม่หายไปซะโดยทีเดียว ถ้าคุณหามันเจอ หรือ Volume ยังไม่ได้ถูกลบไปพร้อม กับ container
ก่อนอื่นแล้วมาดู volume ในเครื่องเรากันก่อนจากคำสั่ง
docker volume ls
ก็จะได้หน้าตาประมาณนี้ แล้วมันคืออันไหนละทีนี่ นี่แหละปัญหา ผมลองไปดูผ่าน เจ้าโปรแกรม Docker Desktop
ปรากฏว่ามันแสดง ไฟล์ที่อยู่ใน Volume ให้เราเห็น ก็เลยไล่ๆ หาจนเจอ ปัญหาต่อไปแล้วจะเอามันกับมายังไงละทีนี่
วิธีที่ผมใช้ก็คือ เราจะ mount เจ้า Volume ID นี้ ของเรากลับไปยัง container ไหนสักอัน และค่อย copy ไฟล์ ทั้งหมดออกมา ดูพอเป็นไปได้ขึ้นไหม
docker run -it -v {volumeID}:/path/to/destination {image} /bin/bash
ตัวอย่าง
docker run -it -v b23123s..............:/mountpoint nginx /bin/bash
จากนั้นเราลองเช็คว่า path ที่ mount เข้ามามี ข้อมูลอยู่ไหม
cd mountpoint
เราก็จะเจอไฟล์ของ ตัวเองแล้วววว
จากนั้นเราจะมา copy ไฟล์ ออกมายังเครื่องของเรา กันโดยใช้คำสั่ง
docker cp {containerId}:/path/src/ /path/dest
ตัวอย่าง
docker cp 1ads23sd:/mountpoint /Works/mnt/tmp
เรานี้เราก็สามารถที่จะกู้ข้อมูลเรากลับมาได้แล้ววววว
จริงๆ เราสามารถ Create volume ไว้ให้เป็นชื่อได้นะโดยการใช้ คำสั่ง
docker volume create myvolume
docker volume ls
ก็จะเจอ Volume ของเรา แล้ววิธีใช้ๆ
version: '3.9'
services:
alp:
image: alpine
volumes:
- myvolume:/your/local/path
command: sleep 10000
volumes:
myvolume:
external: false
ประมาณนี้ๆ ถ้าผิดพลาดอภัยด้วยน้าา อันนี้ผมอยากจะแชร์วิธีที่ผมเคยทำ หรือใครมีวิธีที่ดีกว่านี้แนะนำๆกันได้เลย
*ขอบคุณพี่เป้ ที่ชี้ทางสว่าง