Tôi có một daemon chạy trên một cổng nhất định (tức là 8008) trên máy chủ của mình và mã của tôi thường tương tác với daemon bằng cách liên hệ với localhost:8008.
Bây giờ tôi đã chứa mã của mình nhưng chưa có daemon. Làm cách nào để chuyển tiếp localhost:8008 trên vùng chứa sang localhost:8008 trên máy chủ đang chạy vùng chứa (và daemon).
Sau đây là của tôiChủ nhàTRÊNnetstat-tlnp
. tôi hy vọng thùng chứa Chuyển tiếp localhost:2009 sang localhost:2009 trên máy chủ
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Trạng thái PID/Tên chương trình
tcp 0 0 127.0.0.1:2009 0.0.0.0:* NGHE 22547/ssh
tcp6 0 0 :::22 :::* NGHE -
tcp6 0 0 ::1:2009 :::* NGHE 22547/ssh
Vì vậy, cách bạn cần nghĩ về điều đó là bộ chứa Docker có ngăn xếp mạng riêng (trừ khi bạn yêu cầu nó hoạt động với --net=máy chủ
ngăn xếp lưu trữ được chia sẻ). Điều này có nghĩa là khi được liên kết với một cổng máy chủ, cổng đó cần phải nằm trong vùng chứa docker nội bộ và bên ngoài ( tài liệu ) được công khai. Các cổng hiển thị trên vùng chứa cần phải được liên kết rõ ràng với cổng máy chủ (trong chạy docker
dùng trong lệnh -p xxxx:yyyy
) hoặc ràng buộc ngầm định (sử dụng PHƠI RA
trong Dockerfile của bạn và sử dụng từ dòng lệnh -P
), như đã nói đây .Nếu Dockerfile của bạn không chứa TIẾT LỘ 8008
, hoặc bạn không ở trong chạy docker
được chỉ định trong lệnh --phơi bày 8008
, thùng chứa của bạn không thể giao tiếp với thế giới bên ngoài,Cho dù sau này bạn chạy docker
dùng trong lệnh -p 8008:8008
!
Vì vậy, để có được tcp/8008 trên máy chủ được liên kết với tcp/8008 trên vùng chứa, bạn cần sử dụng trong Dockerfile TIẾT LỘ 8008
(Sau đó trong container sử dụng xây dựng docker
)hoặc --hiện hữu lệnh chạy docker
Trung Quốc mở rộng 8008
. Ngoài ra, bạn cần sử dụng -P
ngầm định hoặc -p 8008:8008
Liên kết rõ ràng các cổng container tiếp xúc với các cổng máy chủ. Ví dụ về việc làm này chạy docker
Lệnh có thể trông như thế này:
docker chạy -it --expose 8008 -p 8008:8008 myContainer
Xin hãy nhớ rằng trong -p 8008:8008
Trong các tùy chọn dòng lệnh, thứ tự của thao tác này là -p CỔNG_HOST:CỔNG_CONTAINER
. Ngoài ra, đừng quên rằng bạn sẽ không thể SSH vào vùng chứa của mình từ một máy khác trên Internet trừ khi bạn định cấu hình iptables trên máy chủ Cổng này cũng được mở khóa trong . Cuối cùng tôi luôn quên điều này và lãng phí nửa giờ trước khi nhớ ra rằng mình đã quên iptables - ĐẦU VÀO ...
Đối với một cổng tcp cụ thể trên máy chủ. Nhưng bạn sẽ có thể SSH từ máy chủ đến vùng chứa mà không cần quy tắc iptables vì nó sử dụng loopback cho các kết nối cục bộ. Chúc may mắn!
Tôi là một lập trình viên xuất sắc, rất giỏi!