tôi vạch trần cổng Docker của contaners của tôi vào máy chủ với một cái gì đó giống nhưDocker và netstat: netstat không hiển thị cảng, tiếp xúc bằng container Docker
docker run -p 80:80 ...
sau đó tôi cố gắng để hiển thị tất cả các cổng nghe cho mục đích gỡ lỗi với netstat
ví dụ:
netstat -at
lạ một điều là netstat sẽ không hiển thị container Docker của tôi với tiếp xúc với các cảng, mặc dù họ đang lắng nghe và trả lời cho trình duyệt.
Làm cách nào để hiển thị netstat
các cổng được hiển thị đó?
UPDATE: Tôi đang chạy này trên Debian 8 Jessie. Dưới đây là những gì tôi làm:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9dfa08bab50d workflows-nginx "/bin/sh -c '/usr/sbi" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp workflows-nginx
d0b0c3f90f13 workflows-django "/bin/sh -c 'python /" 7 hours ago Up 3 hours 0.0.0.0:8000->8000/tcp workflows-django
99a857c92533 workflows-db "/docker-entrypoint.s" 7 hours ago Up 3 hours 5432/tcp workflows-db
Tại đây docker báo cáo rằng các cổng container được chuyển tiếp đến máy chủ. Hơn nữa, nếu tôi dừng workflows-nginx
vùng chứa, nó dừng trả lời cho trình duyệt bằng http (cổng 80). Nếu tôi bắt đầu lại, nó sẽ bắt đầu trả lời lại.
Dưới đây là sản phẩm của sudo netstat -at | less
:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 *:15672 *:* LISTEN
tcp 0 0 *:postgresql *:* LISTEN
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 *:25672 *:* LISTEN
tcp 0 0 *:48142 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:epmd *:* LISTEN
tcp 0 0 bob-acer:34866 104.16.33.249:http ESTABLISHED
tcp 0 0 bob-acer:42380 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42543 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42525 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:44076 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42944 stackoverflow.com:https ESTABLISHED
tcp 0 0 localhost:epmd localhost:50831 ESTABLISHED
tcp 0 0 bob-acer:42655 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42384 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:44626 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42390 stackoverflow.com:https ESTABLISHED
tcp 0 0 localhost:50831 localhost:epmd ESTABLISHED
tcp 0 0 bob-acer:48301 c2.52.c0ad.ip4.st:https ESTABLISHED
tcp 0 0 bob-acer:42151 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42205 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42539 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:44737 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:39648 77.94.164.251:https ESTABLISHED
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 [::]:postgresql [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 [::]:44794 [::]:* LISTEN
tcp6 0 0 [::]:8000 [::]:* LISTEN
tcp6 0 0 [::]:amqp [::]:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 1 0 localhost:58497 localhost:ipp CLOSE_WAIT
Như bạn có thể thấy, không phải cổng 80, cũng không phải cổng 443 được báo cáo. Cổng 8000 của workflows-django
vì một số lý do được mở trên giao diện IPv6. Hơn nữa, tôi quên vô hiệu hóa postgres trên máy chủ và họ vẫn không đụng độ với postgres container workflows-db
.
Mọi thứ đang chạy trên sổ ghi chép cục bộ của tôi, vì vậy tôi đoán không thể có bất kỳ sự nhầm lẫn nào với máy chủ.
phiên bản Docker của tôi là:
docker --version
Docker version 1.10.3, build 20f81dd
UPDATE 2: này liên quan đến Docker vạch trần tham số. Nếu bạn viết dòng này trong dockerfile của bạn và chạy container với -p, cổng sẽ hiển thị trong netstat. Nếu bạn sử dụng -p nhưng không viết EXPOSE, cổng của bạn sẽ không được liệt kê bởi netstat.
Cảm ơn bạn đã trả lời chi tiết của bạn. Tôi đã thực hiện mọi kiểm tra bạn đã đề xuất và viết kết quả trong câu hỏi của tôi (xem cập nhật). Tuy nhiên, docker cổng không được báo cáo bởi netstat, mặc dù họ chắc chắn làm việc. –
Tôi cảm thấy nó có liên quan đến thông số 'EXPOSE' của docker. Nếu bạn viết dòng này trong dockerfile của bạn và chạy thùng chứa bằng '-p', cổng sẽ hiển thị trong netstat. Nếu bạn sử dụng '-p' nhưng không viết' EXPOSE', cổng của bạn sẽ không được liệt kê bởi netstat. Chưa thử nghiệm giả thuyết này. –