无法访问Docker容器

6

我正在 docker 容器中运行 Rails 应用程序,但尝试从浏览器访问时,浏览器显示 ERR_CONNECTION_REFUSED。当运行 docker ps 时,我得到以下结果:

a086ed5a6c4a        rails                       "bash"                   3 days ago          Up About an hour    0.0.0.0:3000->3000/tcp                                                            rails

当我运行docker inspect rails命令时,我发现网关是"Gateway": "172.17.0.1"

当我尝试执行ping 172.17.0.1命令时,它可以工作,但如果我执行ping 172.17.0.1:3000命令,则无法正常工作。

当我尝试执行nmap -p 3000 172.17.0.1命令时,结果如下:

Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-12 15:27 PST
Nmap scan report for 172.17.0.1
Host is up (0.000047s latency).
PORT     STATE  SERVICE
3000/tcp closed ppp

运行 sudo netstat -tulpn 命令后,我得到以下输出。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:5940          0.0.0.0:*               LISTEN      1900/teamviewerd
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      5965/dnsmasq    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1195/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      2910/cupsd      
tcp6       0      0 :::5858                 :::*                    LISTEN      4693/docker-proxy
tcp6       0      0 :::4200                 :::*                    LISTEN      4629/docker-proxy
tcp6       0      0 :::6379                 :::*                    LISTEN      4423/docker-proxy
tcp6       0      0 :::8080                 :::*                    LISTEN      4665/docker-proxy
tcp6       0      0 ::1:53                  :::*                    LISTEN      1195/dnsmasq    
tcp6       0      0 ::1:631                 :::*                    LISTEN      2910/cupsd      
tcp6       0      0 :::5432                 :::*                    LISTEN      4540/docker-proxy
tcp6       0      0 :::3000                 :::*                    LISTEN      3099/docker-proxy
tcp6       0      0 :::3001                 :::*                    LISTEN      4700/docker-proxy
tcp6       0      0 :::3002                 :::*                    LISTEN      6521/docker-proxy
tcp6       0      0 :::7357                 :::*                    LISTEN      4610/docker-proxy
udp        0      0 0.0.0.0:27824           0.0.0.0:*                           6091/dhclient   
udp        0      0 0.0.0.0:53717           0.0.0.0:*                           569/avahi-daemon: r
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           3206/chrome     
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           569/avahi-daemon: r
udp        0      0 0.0.0.0:5699            0.0.0.0:*                           5961/dhclient   
udp        0      0 127.0.1.1:53            0.0.0.0:*                           5965/dnsmasq    
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1195/dnsmasq    
udp        0      0 0.0.0.0:68              0.0.0.0:*                           6091/dhclient   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           5961/dhclient   
udp        0      0 0.0.0.0:631             0.0.0.0:*                           1336/cups-browsed
udp6       0      0 :::53862                :::*                                5961/dhclient   
udp6       0      0 :::5353                 :::*                                569/avahi-daemon: r
udp6       0      0 ::1:53                  :::*                                1195/dnsmasq    
udp6       0      0 :::59093                :::*                                569/avahi-daemon: r
udp6       0      0 :::26992                :::*                                6091/dhclient   
1个回答

11

尝试将Rails服务器绑定到0.0.0.0,这会告诉它绑定到Docker主机上所有的IP地址。默认情况下它只绑定到本地主机,最近已经更改过了,如此答案中所解释的。使用-b参数执行rails server即可完成这个操作:

docker run -p 3000:3000 -d rails server -p 3000 -b 0.0.0.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接