2015-01-18 20 views
9

Tôi có một docker container được xây dựng với "EXPOSE 8000" trong số các hướng dẫn của nó. Tôi bắt đầu quá trình như thế này:Docker: nghe trong container, không trả lời bên ngoài

sudo docker run -t -i -P imagename 

Quá trình trong container đang lắng nghe trên 8000.

# netstat -a 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 localhost:8000   *:*      LISTEN  
Active UNIX domain sockets (servers and established) 
Proto RefCnt Flags  Type  State   I-Node Path 
# 

Mở máy chủ (ví dụ, bên ngoài container), tôi thấy rằng cảng 49.164 là ràng buộc để cảng container 8000:

[S-22][email protected]:~ $ sudo docker ps 
CONTAINER ID  IMAGE      COMMAND    CREATED    STATUS    PORTS      NAMES 
0b0e333c6ec9  lkz:latest     "/bin/bash"   About an hour ago Up 6 minutes  0.0.0.0:49164->8000/tcp lkxyz__2015-01-18_202737 
[S-22][email protected]:~ $ 

Inded, docker inspect nói (trong số những thứ khác)

"NetworkSettings": { 
    "Bridge": "docker0", 
    "Gateway": "172.17.42.1", 
    "IPAddress": "172.17.0.16", 
    "IPPrefixLen": 16, 
    "PortMapping": null, 
    "Ports": { 
     "8000/tcp": [ 
      { 
       "HostIp": "0.0.0.0", 
       "HostPort": "49164" 
      } 
     ] 
    } 
}, 

Chưa hết, tôi không thể nói chuyện với vùng chứa. Bên ngoài,

[S-22][email protected]:~ $ telnet localhost 49164 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
Connection closed by foreign host. 
1,[S-22] [email protected]:~ $ 

trong khi bên trong,

# telnet localhost 8000 
Trying ::1... 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
GET/

[18/Jan/2015 23:00:59] "GET /" 200 4066 
<!DOCTYPE html> 
<html> 
<head> 
... 

tôi mong chờ các telnet để 49.164 ở bên ngoài để trở về html như nó ở bên trong.

Mọi đề xuất?

+0

Aha, điều này có thể là vùng chứa chỉ lắng nghe thực sự đối với máy chủ cục bộ. Làm điều tương tự trên máy chủ siegfried, tôi có thể kết nối với 'telnet localhost 8000' nhưng không phải với 'telnet siegfried 8000'. OK, vậy bây giờ làm cách nào để sửa lỗi này ... – jma

Trả lời

18

Bạn có thể muốn có dịch vụ bạn đang chạy trong vùng chứa để nghe trên 0.0.0.0 thay vì 127.0.0.1

+0

đây là một phao cứu sinh. Sử dụng docker cho Apache Spark, spark: //0.0.0.0: 7077 – javaNoober

+0

làm cách nào để thực hiện điều này trong windows 10 với docker? nghe 0.0.0.0? – blackhawk

+0

Trong trường hợp của chúng tôi, cổng đang lắng nghe trên 0.0.0.0, nhưng chúng tôi cần phải đặt lại Docker về giá trị mặc định của nhà sản xuất (tab Docker Preferences/Bomb) và cài đặt lại hình ảnh. – dfdumaresq

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