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

ประมาณนี้ๆ ถ้าผิดพลาดอภัยด้วยน้าา อันนี้ผมอยากจะแชร์วิธีที่ผมเคยทำ หรือใครมีวิธีที่ดีกว่านี้แนะนำๆกันได้เลย

*ขอบคุณพี่เป้ ที่ชี้ทางสว่าง