Thật dễ dàng để làm cho một dịch vụ do Docker lưu trữ chỉ có thể truy cập được đối với các vùng chứa khác trên cùng một máy chủ. Nếu bạn:
- Đặt máy chủ để liên kết hoặc lắng nghe trên 0.0.0.0 hoặc ::0 (tất cả các địa chỉ);
- Tạo một mạng Docker không mặc định (Docker Compose sẽ tự động thực hiện việc này);
- Khởi chạy vùng chứa máy chủ và bất kỳ vùng chứa máy khách nào được liên kết trên mạng Docker đó (Docker Compose sẽ thực hiện việc này theo mặc định); và
- Không không đặt
docker run -p
hoặc Docker Composeports:
tùy chọn
thì các vùng chứa ứng dụng khách có thể đến vùng chứa máy chủ bằng cách sử dụng tên vùng chứa của nó làm tên máy chủ lưu trữ, nhưng các quy trình không phải Docker trên máy chủ và các máy chủ khác không thể truy cập máy chủ.
Nếu máy chủ của bạn có nhiều giao diện mạng và liên kết với một trong những giao diện đó sẽ khiến dịch vụ trở thành "riêng tư" thì bạn có thể làm điều tương tự với docker run -p
. Nếu máy chủ của bạn có địa chỉ IP công cộng 10.20.30.40/16 và cả địa chỉ IP riêng 192.168.144.128/24 thì docker run -p 192.168.144.128:6379:6379
sẽ cung cấp nó cho mạng riêng (và các vùng chứa Docker khác như trên) chứ không phải mạng công cộng. (Bản thân máy chủ, bên trong vùng chứa, vẫn cần liên kết với 0.0.0.0.)
Nếu bạn cần máy chủ hiển thị ngoài máy chủ, nhưng chỉ với một số địa chỉ IP, tôi nghĩ rằng bạn đang sử dụng iptables
ma thuật không có nguồn gốc từ Docker.