Các lệnh Docker hay dùng và lỗi thường gặp: tra cứu nhanh cho người mới
G
GnurtLập trình viên full-stack
8 phút đọc
Trong bài này
Bài viết này là bảng tra cứu nhanh các lệnh Docker hay dùng, với các lệnh được chia theo công việc và kèm ví dụ thực tế. Bạn sẽ biết khi nào dùng lệnh nào, cách kiểm tra và dọn dẹp, cùng các lỗi thường gặp và cách sửa. Nội dung tập trung vào các lệnh cơ bản mà người mới thường cần, không đi sâu vào cấu hình nâng cao.
Các ví dụ trong bài dùng chung app mẫu của loạt bài: image web-app, container tên web, app nghe ở cổng 3000. Bạn thay các tên này bằng tên của mình khi chạy lệnh.
Nhóm lệnh xem và kiểm tra
docker ps liệt kê các container đang chạy.
docker ps -a liệt kê cả các container đã dừng.
docker images liệt kê các image có trên máy.
docker version cho xem phiên bản Docker đang chạy, gồm cả phía client và server.
docker info cho xem thông tin tổng quan về Docker trên máy bạn, như số container và image hiện có.
docker logs cho xem nhật ký của một container để tìm lỗi.
docker logs web
docker logs --tail 100 web
docker logs -f web
--tail 100 chỉ hiện 100 dòng cuối; -f theo dõi log liên tục, bấm Ctrl+C để thoát.
docker inspect cho xem chi tiết cấu hình của một container.
Lệnh Docker chia theo nhóm công việc.
Nhóm lệnh tạo, chạy và quản lý container
docker run tạo và chạy một container mới.
docker run -d --name web -p 3000:3000 web-app
-d chạy container ở chế độ nền; --name đặt tên container là web; -p 3000:3000 ánh xạ cổng 3000 trên máy bạn sang cổng 3000 trong container; web-app là image dùng để chạy. Mở localhost:3000 trên trình duyệt để kiểm tra app đã chạy.
docker stop web
docker start web
docker restart web
docker rm web
docker stop dừng container nhưng vẫn giữ container đó; docker start chạy lại container đã dừng; docker restart dừng rồi chạy lại container trong một lệnh. docker rm xóa container, nhưng mặc định chỉ xóa được container đã dừng, nên hãy docker stop trước.
docker exec -it vào trong một container đang chạy để gõ lệnh.
docker exec -it web sh
Tùy chọn -i giữ đầu vào mở để bạn gõ lệnh, còn -t cấp một terminal để hiển thị kết quả. Container phải đang chạy mới vào được, và image phải có shell: image Alpine dùng sh, image có Bash mới dùng bash.
Nhóm lệnh quản lý image
docker build tạo một image từ Dockerfile.
docker build -t web-app .
-t đặt tên web-app cho image; dấu . nghĩa là build từ thư mục hiện tại, nơi phải có Dockerfile.
docker pull tải một image về máy.
docker pull node:26-alpine
node là tên image, 26-alpine là tag (phiên bản). Dùng tag cụ thể thay cho latest để kết quả ổn định hơn.
docker image prune mặc định chỉ xóa các dangling image — image không còn tag và không được container nào tham chiếu. Thêm -a để xóa mọi image không được container nào dùng: docker image prune -a. Image đã xóa có thể phải tải hoặc build lại.
Nhóm lệnh quản lý volume và network
docker volume ls liệt kê các volume.
docker network ls liệt kê các network.
docker volume prune xóa các volume không được container nào dùng. Mặc định, lệnh chỉ xóa anonymous volume — volume không có tên, do Docker tự tạo. Thêm -a để xóa cả named volume không dùng: docker volume prune -a. Hãy kiểm tra kỹ trước khi chạy, vì dữ liệu trong volume đã xóa khó khôi phục.
Nhóm lệnh kiểm tra và dọn dẹp
docker system df cho xem Docker đang dùng bao nhiêu dung lượng đĩa.
docker container prune xóa các container đã dừng. Chạy docker ps -a trước để xem những container nào sẽ bị xóa.
Người mới không nên chạy docker system prune -a khi chưa hiểu rõ phạm vi xóa. Lệnh này xóa tất cả container đã dừng, network không dùng, image không được container nào tham chiếu và bộ nhớ đệm lúc build image (build cache) không còn dùng. Mặc định, lệnh không xóa volume; thêm --volumes mới xóa cả anonymous volume không dùng. Hãy kiểm tra kỹ trước khi chạy.
Bảng tra cứu nhanh
Muốn làm gì
Lệnh
Xem container đang chạy
docker ps
Xem cả container đã dừng
docker ps -a
Xem phiên bản Docker
docker version
Xem log lỗi
docker logs web
Vào trong container
docker exec -it web sh
Chạy container mới
docker run -d –name web -p 3000:3000 web-app
Dừng container
docker stop web
Khởi động lại container
docker restart web
Xóa container đã dừng
docker rm web
Build image
docker build -t web-app .
Tải image
docker pull node:26-alpine
Xem dung lượng Docker đang dùng
docker system df
Lỗi thường gặp và cách sửa
Cổng đã bị chiếm. Thông báo thường gặp là “port is already allocated”. Chạy docker ps để xem container nào đang giữ cổng đó, rồi dừng container đó bằng docker stop <tên-container> hoặc đổi sang cổng khác khi chạy. Nếu docker ps không thấy container nào giữ cổng, cổng đang bị một chương trình khác trên máy chiếm — hãy tắt chương trình đó hoặc đổi sang cổng khác.
Không kết nối được tới Docker daemon (tiến trình Docker chạy nền). Thông báo thường gặp là “cannot connect to the Docker daemon”. Nguyên nhân thường gặp nhất là Docker chưa chạy: Docker Desktop chưa khởi động xong, hoặc dịch vụ Docker chưa chạy. Hãy khởi động Docker Desktop hoặc dịch vụ Docker, rồi chạy docker info để kiểm tra Docker đã phản hồi chưa. Nếu Docker đã chạy mà vẫn báo lỗi, hãy chạy docker context ls để xem Docker CLI đang trỏ tới daemon nào.
Hết dung lượng đĩa. Thông báo thường gặp là “no space left on device”. Nguyên nhân thường gặp là các image và container cũ chiếm nhiều dung lượng. Hãy kiểm tra theo thứ tự: docker system df để xem loại nào chiếm nhiều nhất, rồi docker ps -a, docker images và docker volume ls để xem cụ thể thứ gì có thể xóa. Chỉ xóa những thứ bạn chắc chắn không còn cần, và đừng chạy ngay docker system prune -a để giải phóng dung lượng.
Container thoát ngay sau khi chạy (Exited). Lệnh chính của container đã kết thúc. Hãy xem nhật ký bằng docker logs <tên-container> để biết nguyên nhân.
Không tải được image. Thông báo thường gặp là “pull access denied” hoặc “image not found”. Hai lỗi này khác nhau: “image not found” thường do sai tên image hoặc tag; “pull access denied” thường do image riêng tư mà bạn chưa đăng nhập — hãy đăng nhập bằng docker login rồi thử lại.
Dữ liệu mất sau khi xóa container. Dữ liệu ghi trong container nằm ở lớp ghi tạm (writable layer) và mất cùng container khi container bị xóa; chỉ dữ liệu lưu trong volume mới còn lại. Hãy đọc lại image, container, volume và network để hiểu cách giữ dữ liệu bằng volume.
Gặp lỗi thì đọc log trước, sửa theo từng bước.
Thói quen tốt khi dùng lệnh Docker
Đọc log bằng docker logs trước khi xóa container hay image.
Đặt tên cho container khi chạy bằng --name để dễ nhận biết trong docker ps.
Dùng một tag cụ thể thay cho latest để kết quả ổn định hơn.
Ghi lại lệnh docker run đầy đủ của dự án (tên container, cổng, volume) vào một ghi chú cá nhân để lần sau chạy lại không phải nhớ.
Câu hỏi thường gặp
docker ps và docker ps -a khác nhau thế nào?
docker ps chỉ hiện các container đang chạy. docker ps -a hiện cả các container đã dừng. Khi bạn không thấy một container, hãy thử docker ps -a trước.
Xóa container có xóa luôn image không?
Không. Xóa container không xóa image mà container được tạo từ đó, và bạn có thể tạo container mới từ image đó. Nhưng dữ liệu ghi trong container (lớp ghi tạm) sẽ mất khi container bị xóa; chỉ dữ liệu trong volume mới còn lại. Muốn giữ dữ liệu sau khi xóa hoặc tạo lại container, hãy lưu dữ liệu vào volume — xem lại bài image, container, volume và network.
Lệnh nào nguy hiểm nhất với người mới?
Không có một lệnh prune nào nguy hiểm nhất cho mọi trường hợp — rủi ro nằm ở phạm vi xóa của từng lệnh. docker container prune xóa mọi container đã dừng; docker image prune mặc định chỉ xóa dangling image; docker volume prune mặc định chỉ xóa anonymous volume không dùng; docker system prune -a dọn nhiều loại cùng lúc nên cần kiểm tra kỹ nhất. Người mới nên bắt đầu bằng các lệnh xem và kiểm tra.
Kết luận
Bạn đã có bảng tra cứu các lệnh Docker hay dùng và cách sửa lỗi thường gặp. Hãy bắt đầu bằng các lệnh xem và kiểm tra, rồi đọc log trước khi xóa.
Bạn có thể sử dụng tài khoản Google để bình luận. Google chỉ chia sẻ tên và địa chỉ email đã xác minh để hiển thị tên của bạn. Bạn có thể đăng xuất bất cứ lúc nào.
Ở bài trước, bạn đã viết Dockerfile cho một app web nhỏ, build thành Image và chạy thử một Container. Bài này dùng chính app và Dockerfile đó để chạy cả app và MySQL cùng lúc bằng Docker Compose, chỉ với một lệnh (docker compose up). Bạn cần có sẵn Docker; nếu chưa cài thì...
Muốn app web của bạn chạy được ở bất cứ đâu, bạn cần đóng gói nó lại, và Dockerfile chính là tờ giấy ghi cách đóng gói đó. Trong bài này, bạn sẽ viết Dockerfile đầu tiên cho một máy chủ web nhỏ viết bằng Node.js (dùng Express), rồi tự build nó thành Image và...
Khi làm việc với Docker, bạn sẽ thường xuyên gặp bốn khái niệm: Image, Container, Volume và Network. Hiểu đơn giản, Image là bản thiết kế, Container là Image đang chạy. Volume giữ dữ liệu, còn Network kết nối các Container với nhau. Bốn khái niệm này đi theo một thứ tự: có bản thiết...
Bình luận
Bạn có thể sử dụng tài khoản Google để bình luận. Google chỉ chia sẻ tên và địa chỉ email đã xác minh để hiển thị tên của bạn. Bạn có thể đăng xuất bất cứ lúc nào.
Đăng nhập bằng GoogleChưa có bình luận nào. Hãy là người đầu tiên!