Email Doanh NghiệpSSLFirewall Anti DDoS

NỘI DUNG

Banner blog lễ 30.4 và 1.5

Container linking Docker là gì? Hướng dẫn thiết lập chi tiết

Hưng Nguyễn

Đã kiểm duyệt nội dung

Ngày đăng:09/05/2026
Cập nhật cuối:29/04/2026
Lượt xem

Quy trình sản xuất nội dung

Đánh giá

[esi kkstarratings cache="private" ttl="3"]

Container linking trong Docker là một cơ chế cũ, cho phép các container giao tiếp nội bộ an toàn với nhau bằng cách thiết lập một kết nối bảo mật. Thay vì expose cổng ra ngoài host, linking giúp container recipient biết và truy cập dịch vụ của container source thông qua các biến môi trường và độ phân giải tên nội bộ. Trong bài viết này, bằng kinh nghiệm của mình trong lĩnh vực kiến trúc hệ thống phân tán, mình sẽ giúp bạn hiểu rõ hơn lợi ích, cách thức hoạt động và lý do tại sao container linking đã bị thay thế bởi các mạng do người dùng định nghĩa trong các ứng dụng Docker hiện đại.

Những điểm chính

  • Quan điểm của mình: Dù Container linking từng đóng vai trò quan trọng trong việc thiết lập giao tiếp nội bộ, nhưng hiện tại đây là một tính năng lạc hậu (legacy) và không còn được khuyến khích sử dụng. Với mình, việc chuyển dịch sang User-defined Bridge Networks là yêu cầu bắt buộc trong kiến trúc hệ thống hiện đại. Giải pháp này không chỉ cung cấp khả năng phân giải tên miền (DNS) tự động, linh hoạt hơn trong quản lý mà còn đảm bảo tính cô lập và bảo mật cao cho các ứng dụng phân tán.
  • Khái niệm: Hiểu rõ Container linking là một cơ chế cũ của Docker, giúp bạn nhận biết vai trò lịch sử của nó và lý do tại sao các giải pháp mạng hiện đại được ưu tiên sử dụng.
  • Lợi ích chính: Nắm được các lợi ích cốt lõi, giúp bạn hiểu rõ các vấn đề mà container linking đã giải quyết trong việc kết nối và cấu hình ứng dụng đa container.
  • Cách thức hoạt động: Nắm vững cơ chế hoạt động thông qua cờ --link, giúp bạn phân biệt rõ ràng với phương pháp ánh xạ cổng và hiểu được cách nó tạo ra các kết nối nội bộ.
  • Cơ chế giao tiếp: Hiểu rõ cách Docker tự động tạo biến môi trường và cập nhật file /etc/hosts, giúp bạn nhận biết cơ chế giao tiếp và khám phá dịch vụ tự động của nó.
  • Khám phá dịch vụ qua biến môi trường: Biết được cách Docker tự động tạo các biến môi trường chứa thông tin kết nối, giúp bạn hiểu rõ cơ chế khám phá dịch vụ (service discovery) tự động mà container linking cung cấp.
  • Phân giải tên qua /etc/hosts: Biết được cách Docker tự động cập nhật file `/etc/hosts`, giúp bạn hiểu rõ cách các container có thể phân giải tên (DNS resolution) của nhau thông qua alias một cách dễ dàng.
  • Cách thiết lập thực tế: Nắm vững các bước thiết lập cơ bản, giúp bạn có thể đọc hiểu hoặc tái tạo các cấu hình cũ.
  • Giới thiệu Vietnix: Biết đến Vietnix là nhà cung cấp máy chủ và VPS uy tín, giúp bạn có một nền tảng hạ tầng tối ưu để triển khai các ứng dụng Docker.
  • Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến Docker Container Linking.
những điểm chính

Container linking Docker là gì?

Container linking trong Docker là cơ chế cũ cho phép các container giao tiếp nội bộ an toàn bằng cách thiết lập kết nối bảo mật, giúp container recipient biết và truy cập dịch vụ của source container thông qua biến môi trường và độ phân giải tên (DNS). Docker tạo tunnel an toàn khi sử dụng flag --link [source_container]:[alias], giúp recipient container truy cập thông tin kết nối (IP, port) của source thông qua biến môi trường và entry trong file /etc/hosts.

Container linking là cơ chế cũ cho phép các container giao tiếp nội bộ an toàn bằng cách thiết lập kết nối bảo mật
Container linking là cơ chế cũ cho phép các container giao tiếp nội bộ an toàn bằng cách thiết lập kết nối bảo mật

Các biến môi trường như DB_PORT_5432_TCP_ADDR, DB_PORT_5432_TCP_PORT và alias hostname được tự động tạo, cho phép ứng dụng trong recipient kết nối tới service của source mà không cần expose port ra host. Tính năng này chỉ hoạt động trên default bridge network và hiện tại đã lỗi thời, Docker docs khuyến nghị thay thế bằng mạng do người dùng định nghĩa (user-defined networks) để có khả năng mở rộng và quản lý tốt hơn.

Sự lỗi thời của container linking cho thấy rõ nhu cầu về một hạ tầng mạng linh hoạt mà VPS truyền thống khó đáp ứng. Dịch vụ Enterprise Cloud giải quyết bài toán này bằng cách cung cấp một nền tảng IaaS toàn diện, cho phép doanh nghiệp toàn quyền thiết lập mạng riêng ảo (Private Network) và tự động hóa qua API. Với hiệu năng từ CPU AMD EPYCổ cứng NVMe, đây là môi trường lý tưởng để vận hành các kiến trúc microservices hiện đại, vượt qua giới hạn của các cơ chế cũ.

Lợi ích khi sử dụng container linking

Container linking mang lại một số lợi ích cụ thể trong giao tiếp nội bộ giữa các container trên Docker như:

  • Tạo kết nối an toàn không expose port ra host: Linking thiết lập tunnel bảo mật giữa source và recipient container, cho phép truy cập dịch vụ nội bộ mà không cần dùng -p hoặc -P để expose port ra mạng bên ngoài.
  • Tự động cung cấp biến môi trường chứa thông tin kết nối: Docker tạo các biến như DB_PORT_5432_TCP_ADDR, DB_PORT_5432_TCP_PORT giúp ứng dụng trong recipient container dễ dàng kết nối tới service của source mà không cần hardcode IP.
  • Cập nhật /etc/hosts với alias hostname để resolve DNS: Recipient container nhận entry trong /etc/hosts với alias trỏ tới IP source, hỗ trợ độ phân giải tên đơn giản và tự động cập nhật khi source restart.
  • Đơn giản hóa cấu hình cho multi-container applications: Linking cho phép định nghĩa quan hệ rõ ràng giữa các container (web ↔ db), giảm phức tạp khi deploy stack đơn giản mà không cần network configuration phức tạp.
Container linking mang lại lợi ích trong giao tiếp nội bộ giữa các container trên Docker
Container linking mang lại lợi ích trong giao tiếp nội bộ giữa các container trên Docker (Nguồn: Internet)

Quan điểm từ chuyên gia: Container linking đóng vai trò quan trọng trong việc định hình tư duy về Service Discovery và Isolation bằng cách loại bỏ phụ thuộc vào IP tĩnh. Tuy nhiên, đây chỉ là giải pháp mang tính chuyển giao. Trong các hệ thống hiện đại, những lợi ích này đã được tối ưu hóa vượt trội thông qua mạng tùy chỉnh (User-defined networks), nơi khả năng quản lý DNS và tính bảo mật được thực hiện chủ động, ổn định và linh hoạt hơn.

Hệ thống container linking trong Docker

Hệ thống container linking trong Docker sử dụng flag --link để tạo kết nối giữa source container và recipient container trên default bridge network. Docker dựa vào tên container được đặt bằng tùy chọn --name để tham chiếu khi thiết lập liên kết, vì tên này làm định danh duy nhất thay thế cho ID ngẫu nhiên tự động.

Cú pháp --link [source_container]:[alias] được áp dụng khi chạy recipient container, với [source_container] là tên container nguồn đã tồn tại và [alias] là tên tham chiếu bên trong recipient để truy cập thông tin kết nối. Container nguồn phải được tạo và chạy trước recipient để đảm bảo liên kết thành công, ví dụ chạy docker run --name db -d postgres trước khi dùng --link db:database cho container web. Quy trình này cho phép recipient nhận biến môi trường và entry /etc/hosts từ source ngay khi khởi động, tạo tunnel an toàn mà không cần expose port ra host.

Hệ thống container linking trong Docker
Hệ thống container linking trong Docker (Nguồn: Internet)

Kết nối container bằng cách ánh xạ cổng mạng

Kết nối container bằng cách ánh xạ cổng mạng sử dụng tùy chọn -p để map cổng bên trong container ra cổng host, cho phép truy cập dịch vụ từ bên ngoài Docker. Cú pháp:

 docker run -p [host_port]:[container_port]

Ví dụ -p 8080:80 cho phép truy cập web server trên port 80 của container qua localhost:8080 trên host.

Tùy chọn -p hỗ trợ các định dạng như -p 80:80/tcp (chỉ định giao thức TCP), -p 127.0.0.1:8080:80 (giới hạn interface IP) hoặc -P (random host port), giúp kiểm soát chính xác traffic vào/ra container trên default bridge network. Cách này khác với container linking vì expose port ra host thay vì tạo tunnel nội bộ an toàn giữa các container.

Giao tiếp giữa các container đã liên kết

Giao tiếp giữa các container đã liên kết được thực hiện qua tunnel an toàn do Docker tạo khi sử dụng flag --link trên default bridge network. Docker thiết lập kết nối trực tiếp giữa source container và recipient container, cho phép recipient truy cập dịch vụ của source thông qua alias hostname và biến môi trường mà không cần expose port ra host.

Kết quả liên kết có thể kiểm tra bằng lệnh:

docker inspect -f "{{ .HostConfig.Links }}" [recipient_container]

Hiển thị mảng dạng [/source_container:/recipient/alias] xác nhận tunnel đã được thiết lập thành công. Sau khi liên kết, recipient container nhận thông tin kết nối đầy đủ từ source (IP, port, environment variables) và có thể ping alias hoặc sử dụng biến môi trường để kết nối service nội bộ một cách tự động.

Biến môi trường được tạo tự động từ linking

Biến môi trường được tạo tự động từ linking cung cấp thông tin kết nối của source container cho recipient container khi sử dụng flag --link. Docker tạo các biến theo định dạng <ALIAS>_<PORT>_<PROTOCOL>_<PROTO> (ví dụ DB_PORT_5432_TCP_ADDR=172.17.0.5, DB_PORT_5432_TCP_PORT=5432) chứa địa chỉ IP và số port của service trong source container. Ngoài ra, Docker tạo biến tổng quát DB_PORT=tcp://172.17.0.5:5432DB_NAME=/recipient/db để ứng dụng dễ dàng truy cập thông tin kết nối mà không cần hardcode.

Tất cả biến môi trường gốc từ source container (từ Dockerfile ENV, -e flag) cũng được expose vào recipient dưới dạng <ALIAS>_ENV_<VARNAME>=<value>, bao gồm cả các biến Docker-internal. Bạn có thể kiểm tra bằng lệnh docker run --rm --link db:db training/webapp env trong recipient container sẽ hiển thị đầy đủ danh sách các biến này.

Cập nhật file /etc/hosts khi liên kết container

Cập nhật file /etc/hosts khi liên kết container diễn ra tự động trong recipient container để hỗ trợ độ phân giải tên của source container. Docker thêm entry vào /etc/hosts của recipient với định dạng <IP_source> <alias> <tên_container> <hostname_container>, ví dụ 172.17.0.5 db_alias 6e5cdeb2d300 db nơi db_alias là alias từ flag --linkdb là tên source container.

Entry này cho phép ứng dụng trong recipient sử dụng alias hostname để ping hoặc kết nối tới source container, ví dụ ping db_alias sẽ resolve tới IP 172.17.0.5 của database container. Khi source container được restart bằng docker restart, Docker tự động cập nhật IP mới trong tất cả entry /etc/hosts của các recipient container liên kết, đảm bảo liên lạc tiếp tục mà không cần can thiệp thủ công.

Bước 1: Tạo container database làm source container

Bạn chạy container database với tùy chọn --name để đặt tên duy nhất, ví dụ:
docker run --name db -e POSTGRES_PASSWORD=password -d postgres:9.4. Lệnh này tạo PostgreSQL container tên “db” chạy nền làm source cho linking.

Bạn khởi động recipient container sử dụng flag --link, ví dụ:
docker run --name web --link db:database -d -p 5000:5000 training/webapp. Ở đây db:database có nghĩa recipient “web” sẽ truy cập source “db” qua alias “database”.

Bước 3: Kiểm tra env và ping alias từ recipient container

Bạn exec vào recipient container bằng docker exec -it web /bin/bash rồi chạy env | grep DB để xem biến môi trường như DATABASE_PORT=tcp://172.17.0.2:5432. Tiếp theo bạn chạy ping database hoặc cat /etc/hosts để xác nhận alias resolve đúng IP source container. Kết quả ping thành công và env hiển thị biến đúng chứng tỏ linking hoạt động bình thường.

Bước 4: Kiểm tra liên kết bằng docker inspect

Bạn chạy docker inspect web và tìm phần HostConfig.Links để xem mảng ["/db:/web/database"] xác nhận liên kết đã được thiết lập. Lệnh docker inspect -f '{{.HostConfig.Links}}' web hiển thị nhanh kết quả linking dưới dạng JSON array.

Cách thiết lập container linking thực tế
Cách thiết lập container linking thực tế

Vietnix – Nền tảng máy chủ và VPS tối ưu cho mọi ứng dụng Docker

Dù bạn đang sử dụng các cơ chế kết nối container truyền thống hay các mạng Docker hiện đại, một hạ tầng máy chủ mạnh mẽ và ổn định là yếu tố không thể thiếu. Bên cạnh Enterprise Cloud, Vietnix còn cung cấp dịch vụ thuê máy chủ và các gói VPS uy tín tại Việt Nam, lý tưởng để bạn làm nền tảng cho mọi dự án Docker.

Với các tùy chọn cấu hình mạnh mẽ, bộ vi xử lý hiệu suất cao, ổ cứng NVMe siêu tốc và kết nối mạng ổn định, Vietnix đảm bảo bạn có đủ tài nguyên để chạy Docker Engine, quản lý hàng trăm container và triển khai các ứng dụng đa container một cách mượt mà, phản hồi tức thì.

Đặc biệt, đội ngũ hỗ trợ kỹ thuật chuyên môn cao của Vietnix luôn túc trực 24/7, sẵn sàng giải quyết mọi vấn đề phát sinh, giúp bạn yên tâm vận hành các ứng dụng của mình.

Liên hệ ngay!

Thông tin liên hệ:

  • Website: https://vietnix.vn/
  • Hotline: 1800 1093
  • Email: sales@vietnix.com.vn
  • Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh

Câu hỏi thường gặp

Làm thế nào để liên kết hai container trong Docker?

Bạn sử dụng flag --link khi chạy recipient container để liên kết với source container đã tồn tại. Ví dụ: docker run --name web --link db:database -d training/webapp tạo liên kết giữa container “web” và “db” với alias “database”. Docker tự động tạo biến môi trường và cập nhật /etc/hosts trong recipient để truy cập source qua alias.

Liên kết Docker có chức năng gì?

Container linking tạo tunnel an toàn giữa source và recipient container trên default bridge network, cung cấp biến môi trường (DB_PORT_5432_TCP_ADDR) và entry /etc/hosts với alias hostname để recipient truy cập service của source mà không cần expose port ra host. Tính năng legacy này đã được thay thế bởi user-defined networks nhưng vẫn hoạt động để giao tiếp nội bộ đơn giản.

Làm thế nào để kết nối với một container Docker từ một container khác?

Cách 1 – Container Linking (legacy): Bạn chạy docker run --link [source]:[alias] để recipient nhận IP/port qua biến môi trường và /etc/hosts.
Cách 2 – User-defined Network (khuyến nghị): Bạn tạo docker network create mynet rồi chạy cả hai container với --network mynet, chúng tự resolve tên qua DNS.
​- Cách 3 – Docker Compose: Bạn định nghĩa networks: trong docker-compose.yml để tự động kết nối các service.

Container linking Docker là một cơ chế hữu ích để thiết lập kết nối an toàn giữa các container mà không cần expose cổng ra ngoài host. Mặc dù đã đơn giản hóa việc triển khai các ứng dụng đa container trong quá khứ, tính năng này hiện đã được coi là lỗi thời do những hạn chế về khả năng mở rộng và độ tin cậy. Các mạng do người dùng định nghĩa đã thay thế hoàn toàn container linking, cung cấp một giải pháp mạnh mẽ, linh hoạt và đáng tin cậy hơn cho việc giao tiếp giữa các container trong hệ sinh thái Docker hiện đại.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

kien-thuc-dich-vu

kien-thuc-kubernetes

text
icon popup single post

CẢM ƠN BẠN ĐÃ ĐÁNH GIÁ BÀI VIẾT

Vietnix sẽ luôn cố gắng cải thiện chất lượng dịch vụ mỗi ngày

ĐÓNG

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG