2016-04-06 22 views
13

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.

Trả lời

2

netstat sẽ hiển thị các cổng tiếp xúc. Dưới đây là một ví dụ

[email protected]:docker$ sudo netstat -at|grep 3030 
[email protected]:docker$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
[email protected]:docker$ docker run -d -p 3030:80 httpd:2.4 
4310ac5fbdbc7314ab4d23e34099a710a3a8790dcf2c6d0a84202c1de5c9fd30 
[email protected]:docker$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS     NAMES 
4310ac5fbdbc  httpd:2.4   "httpd-foreground" 3 minutes ago  Up 3 minutes  0.0.0.0:3030->80/tcp hungry_fermat 
[email protected]:docker$ sudo netstat -at|grep 3030 
tcp6  0  0 [::]:3030    [::]:*     LISTEN 
[email protected]:docker$ sudo netstat -tulpn|grep 3030 
tcp6  0  0 :::3030     :::*     LISTEN  10294/docker-proxy 
[email protected]:docker$ 

Một số điều cơ bản bạn cần phải xác minh bản thân:

  1. bạn đang chạy netstat với quyền cao? Đôi khi có thể bỏ lỡ khi bạn không phải là người gốc
  2. Thùng chứa docker của bạn có đang chạy trên cùng một máy chủ như bạn mong đợi không? Kiểm tra với docker ps
  3. docker ps liệt kê chuyển tiếp cổng không? Giống như từ trên, bạn sẽ có thể thấy một cái gì đó như thế này 0.0.0.0:3030->80/tcp

Cũng lưu ý rằng, trình cắm-proxy là máy chạy trên máy chủ. Tất cả các lệnh trên giả định rằng bạn chạy trên Linux. này đã được thử nghiệm với ubuntu 15.10

Nếu bạn vẫn cảm thấy bạn đang thiếu chuyển tiếp, sau đó xin vui lòng gửi trở lại hệ điều hành của bạn, phiên bản Docker, vv

Cảm ơn,

+1

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. –

+1

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. –

Các vấn đề liên quan