Một bài hot trên r/ClaudeCode hôm nay kể lại một lỗi rất đời: đang dùng Claude Code xử lý một task tưởng đơn giản, agent đề xuất chạy docker compose down -v, người dùng làm theo, và toàn bộ dữ liệu làm nhiều tuần trong volume biến mất.
Đây không chỉ là câu chuyện “đừng copy lệnh máy móc”. Nó là tín hiệu rõ hơn: khi AI coding agent đi sâu vào môi trường local, ranh giới giữa “sửa code” và “phá state” trở nên rất mỏng. Một lệnh đúng về mặt kỹ thuật vẫn có thể sai về mặt vận hành.
Điểm đáng chú ý
docker compose down -v không giống docker compose down thông thường.
-
docker compose down: dừng và gỡ container, network mặc định của compose project. -
docker compose down -v: gỡ luôn named volumes được khai báo trong compose file và anonymous volumes gắn với container.
Nếu database local đang nằm trong volume đó, dữ liệu dev, seed, bản test thủ công, file upload, migration state hoặc nội dung đang làm dở có thể mất ngay lập tức.
Vấn đề là nhiều agent coding hiện nay có xu hướng tối ưu cho “làm cho test chạy lại” hoặc “reset môi trường cho sạch”, trong khi người vận hành lại cần bảo toàn dữ liệu. Hai mục tiêu này không tự động giống nhau.
Vì sao lỗi này dễ xảy ra hơn khi dùng AI agent
Có vài yếu tố cộng lại:
- Người dùng mệt, muốn xong việc nhanh, đặc biệt vào cuối ngày.
- Agent nói lệnh nghe rất tự tin, nhưng thường không biết đầy đủ giá trị của dữ liệu local.
- Docker command có nhiều cờ ngắn,
-vnhìn nhỏ nhưng tác động lớn. - Dự án side project hay MVP thường “tạm để DB trong compose đã”, rồi tạm đó kéo dài nhiều tuần.
- Khi agent đã tiêu nhiều token hoặc quota mà chưa xong, người dùng dễ rơi vào tâm lý tiếp tục brute force thay vì dừng lại kiểm tra.
Tin tức nhỏ này đáng chú ý vì nó phản ánh một thay đổi lớn hơn: AI coding không còn chỉ viết file. Nó chạm vào database, container, migration, credentials, cloud resource và đôi khi cả dữ liệu thật.
Checklist an toàn trước khi chạy lệnh do agent đề xuất
Trước các lệnh có chữ down, prune, delete, drop, reset, clean, force, rm, -v, --volumes, --all, anh em nên bắt agent trả lời 4 câu này:
- Lệnh này sẽ xóa chính xác tài nguyên nào?
- Có dữ liệu người dùng, database, volume hoặc file upload nào bị ảnh hưởng không?
- Có phương án backup hoặc dry-run không?
- Có lệnh thay thế ít phá hủy hơn không?
Nếu agent không trả lời rõ, đừng chạy.
Với Docker, có thể kiểm tra nhanh:
docker compose ps
docker volume ls
docker compose config
Nếu đang nghi ngờ volume nào chứa database, inspect trước:
docker volume inspect <volume_name>
Và trước khi reset mạnh, backup database hoặc ít nhất dump volume ra ngoài project.
Một cách vận hành tốt hơn cho team dùng Claude Code
Mình nghĩ team nào dùng AI coding agent thường xuyên nên đặt vài rule cố định trong repo:
## AI agent safety rules
- Không được đề xuất lệnh xóa dữ liệu nếu chưa giải thích tác động.
- Không chạy hoặc yêu cầu chạy `docker compose down -v`, `docker system prune`, `rm -rf`, `drop database` nếu chưa có backup.
- Trước khi reset môi trường, phải liệt kê volume/database/file có thể mất.
- Ưu tiên sửa nguyên nhân lỗi thay vì reset toàn bộ state.
Nếu có thể, tách database quan trọng khỏi compose stack dùng cho app dev, hoặc ít nhất đặt volume name rõ ràng và có script backup một dòng.
Ví dụ:
mkdir -p backups
docker exec <db_container> pg_dump -U <user> <db_name> > backups/dev-$(date +%Y%m%d-%H%M).sql
Không cần làm quá enterprise. Chỉ cần backup dễ chạy hơn lệnh phá là đã giảm rủi ro rất nhiều.
Bài học vận hành
AI agent có thể giúp code nhanh hơn, nhưng quyền chạy lệnh hạ tầng vẫn cần cơ chế kiểm soát. Đặc biệt với lệnh làm sạch môi trường, mình sẽ xem mặc định là nguy hiểm cho tới khi chứng minh ngược lại.
Một nguyên tắc đơn giản: nếu lệnh có thể làm mất dữ liệu, agent phải giải thích như một SRE đang trực production, không phải như một autocomplete đang đoán bước tiếp theo.
Claude Code, Codex, Cursor hay bất kỳ agent nào cũng chỉ nên là người đề xuất. Người giữ chìa khóa xóa dữ liệu vẫn phải là mình.
Top comments (0)