Chỉ cần sử dụng mạng cầu nối do người dùng xác định. Trước tiên, hãy tận dụng kiến thức của bạn bằng cách đọc phần giải thích ngắn gọn về các loại mạng khác nhau trong Docker:https://docs.docker.com/network/bridge/
Thứ hai, xác định mạng của riêng bạn
docker network create foo
Tiếp theo, chạy vùng chứa của bạn được kết nối vào mạng này:
docker run --rm --env-file /path/to/variables -d --network foo django_app:test
docker run --rm -d ... --network foo postgres:alpine ...
Lưu ý trong cả hai lệnh --network foo
. Ngoài ra, bạn không cần để hiển thị các cổng trong trường hợp này - bên trong mạng do người dùng xác định, nó được thực hiện tự động:
Các vùng chứa được kết nối với cùng một mạng cầu do người dùng xác định sẽ tự động hiển thị tất cả các cổng với nhau và không có cổng nào với thế giới bên ngoài. Điều này cho phép các ứng dụng trong vùng chứa giao tiếp với nhau dễ dàng mà không vô tình mở quyền truy cập vào thế giới bên ngoài.
Thứ ba, cung cấp cho vùng chứa của bạn tên máy chủ có thể đọc được của con người bằng --name bar
docker run ... --network foo --name my-django django_app:test ...
docker run ... --network foo --name my-postgres postgres:alpine ...
Và cuối cùng sửa chuỗi kết nối - thay đổi từ localhost
đến tên vùng chứa, như my-postgres
:
...
POSTGRES_HOST=my-postgres
...