CHƯƠNG 03 · Docker Networking•BÀI 10 / 80

Container DNS và user-defined networks

Kết nối các services bằng tên, không hardcode IP động.

Nền tảng◷ 4 phút đọc2/4 trong chương

Nắm bản chất

Trên Docker user-defined bridge, các containers có thể phân giải tên lẫn nhau qua cơ chế DNS do Docker quản lý. Docker Compose tự tạo network mặc định cho project và cho phép sử dụng service name, ví dụ db:5432 hoặc redis:6379.

Container IP không phải một API ổn định: recreate có thể khiến IP thay đổi. Điều quan trọng là tên service + port bên trong network, không phải host port đã publish.

Luồng hoạt động

api→embedded DNS→db container

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

services:
  api:
    image: busybox:1.36
    command: ["sh", "-c", "nslookup db; sleep 3600"]
  db:
    image: postgres:18
    environment:
      POSTGRES_PASSWORD: lab-only
docker compose up -d
docker compose logs api

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

Tạo một compose project thử nghiệm và dùng nslookup db từ API. Sau đó recreate DB rồi kiểm tra DNS vẫn trỏ tới container hiện tại.

Lỗi dễ mắc

!

Không dùng hostname localhost cho các services khác container, trừ khi các tiến trình thực sự chia sẻ network namespace.

Tự kiểm tra

Từ API container, nên kết nối `db:5432` hay `localhost:5432`?Xem đáp án ↗

Trong mạng Compose thông thường, dùng db:5432.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.

→ Mở bảng lệnh tra cứu nhanh
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗