Lỗi gặp phải
Error response from daemon: network myapp_default not found
Lỗi này xuất hiện khi bạn chạy docker compose start hoặc docker compose up với các container đã bị dừng trước đó — và Docker không tìm thấy network mà các container đó cần kết nối vào.
Nguyên nhân
Docker Compose tạo một network riêng cho mỗi project, mặc định có tên là {project}_default. Network này bị mồ côi hoặc bị xóa khi:
- Bạn đã chạy
docker compose down(lệnh này xóa network) rồi thử khởi động lại bằngdocker compose startthay vìup - Ai đó đã dọn dẹp network thủ công:
docker network prune - Thư mục project bị đổi tên — đổi tên project đồng nghĩa tên network mong đợi không còn khớp nữa
- Một công cụ hoặc script khác đã dọn dẹp các network không dùng đến giữa các lần chạy
Các container vẫn còn tồn tại ở trạng thái dừng. Chúng nhớ network mình thuộc về — nhưng network đó đã không còn.
Cách Khắc Phục Từng Bước
Cách 1: Tạo lại toàn bộ (Nhanh nhất)
Không cần giữ trạng thái container? Chỉ cần xóa sạch rồi khởi động lại:
docker compose down
docker compose up -d
docker compose down xóa sạch các container đã dừng và các network. docker compose up tạo network mới và khởi động lại tất cả. Cách này giải quyết được 90% trường hợp.
Cách 2: Chỉ tạo lại Network bị thiếu
Muốn giữ nguyên các container hiện có và chỉ sửa network? Tạo thủ công:
# Kiểm tra tên network nào đang được mong đợi
docker compose config | grep -A5 'networks'
# Xác nhận network đó thực sự bị thiếu
docker network ls | grep myapp
# Tạo lại network
docker network create myapp_default
Sau đó khởi động các service:
docker compose start
Tên network theo quy tắc {project_name}_default. Tên project thường là tên thư mục — xác nhận bằng lệnh:
docker compose config --format json | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('name',''))"
Hoặc đơn giản hơn, đọc thông báo lỗi — nó đã nói rõ network nào bị thiếu (myapp_default trong trường hợp này).
Cách 3: Khai báo rõ Network trong compose.yaml
Mệt mỏi vì lỗi này cứ lặp lại? Cố định network trong file compose để kiểm soát vòng đời của nó:
services:
web:
image: nginx
networks:
- app-net
db:
image: postgres
networks:
- app-net
networks:
app-net:
name: myapp_default # tên cố định, không thay đổi khi đổi tên thư mục
driver: bridge
Khi có name cố định, việc đổi tên thư mục project sẽ không phá vỡ gì nữa. Tên network luôn ổn định dù project nằm ở đâu.
Cách 4: Dùng External Network
Nhiều Compose stack dùng chung một network? Khai báo nó là external:
# Tạo một lần thủ công
docker network create shared_net
# Trong compose.yaml
networks:
shared_net:
external: true
Với external: true, Compose sẽ không động vào network khi chạy up hay down — bạn tự quản lý vòng đời của nó. Đây là lựa chọn phù hợp cho các database dùng chung hoặc reverse proxy như Traefik.
Kiểm tra sau khi sửa
# Xác nhận network đã tồn tại
docker network ls | grep myapp_default
# Kiểm tra các container đã được gắn vào network
docker network inspect myapp_default
# Xác nhận các service đang chạy
docker compose ps
Trong kết quả docker network inspect, kiểm tra phần Containers. Khi các service đã chạy, tất cả đều sẽ xuất hiện ở đó.
Lưu ý thêm
Luôn dùng docker compose down, đừng chỉ dùng stop
docker compose stop tạm dừng container nhưng vẫn giữ nguyên container và các tham chiếu network. docker compose start có thể tiếp tục bình thường. Vấn đề xảy ra khi network biến mất giữa lúc stop và start — thường do docker network prune. Sau bất kỳ lần dọn dẹp network thủ công nào, hãy dùng docker compose up thay vì start.
Chú ý khi đổi tên thư mục
Di chuyển thư mục project — ví dụ mv myapp myapp-v2 — sẽ thay đổi tên Compose project và phá vỡ tên network mong đợi. Các container đã dừng vẫn tham chiếu đến myapp_default, nhưng Compose giờ lại tìm myapp-v2_default. Hãy cố định tên project bằng file .env:
# .env
COMPOSE_PROJECT_NAME=myapp
Gỡ lỗi xung đột subnet của network
Trong môi trường có nhiều stack, Docker đôi khi không thể tạo lại network do xung đột subnet. Nếu docker compose up bị treo ở bước tạo network, hãy kiểm tra các network hiện có và subnet của chúng trước. Subnet Calculator tại ToolCraft giúp tính toán dải CIDR và tránh trùng lặp dễ dàng. Bạn cũng có thể hardcode subnet trong compose.yaml:
networks:
app-net:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
Dọn dẹp các container mồ côi sau khi reset network
# Xóa các container không còn network hợp lệ
docker compose down --remove-orphans
docker compose up -d
--remove-orphans xóa các container của service không còn trong file compose. Chạy lệnh này sau bất kỳ lần reset network lớn nào để bắt đầu lại từ trạng thái sạch.

