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?
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