无法连接到应用正在侦听的docker容器端口

时间:2016-03-07 17:31:35

标签: docker

我想运行Jenkins,但为了演示这个问题,我在Ubuntu 15.10中运行了一个netcat服务器容器:

Docker version 1.6.2, build 7c8fca2

这是我的Dockerfile:

FROM ubuntu
CMD while true; do echo 'HTTP/1.1 200 OK\r\n\r\nHello world' | nc -l 8080; done

在主机上运行时,此单行将返回HTTP 200响应。

现在,在容器上。跑docker build -t mydoc .。跑docker run -it --expose 8080 -p 8080:8080 mydoc。在另一个终端,尝试卷曲它:curl -D - -o - http://127.0.0.1:8080

只是阻止没有回应。

一些可能相关的信息:

>docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
1acc13bb3384        mydoc:latest        "/bin/sh -c 'while t   48 seconds ago      Up 47 seconds       0.0.0.0:8080->8080/tcp   goofy_darwin        

>netstat -ant | grep 8080
tcp        0      1 10.0.2.15:34512         172.17.0.25:8080        SYN_SENT   
tcp        0      0 127.0.0.1:33276         127.0.0.1:8080          ESTABLISHED
tcp6       0      0 :::8080                 :::*                    LISTEN     
tcp6      78      0 127.0.0.1:8080          127.0.0.1:33276         ESTABLISHED

注意SYN_SENT。就这一点而言。

1 个答案:

答案 0 :(得分:0)

Linux服务状态显示为:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2016-03-07 13:39:44 CST; 2min 24s ago
     Docs: http://docs.docker.com
 Main PID: 672 (docker)
   Memory: 11.2M
      CPU: 62ms
   CGroup: /system.slice/docker.service
           └─672 /usr/bin/docker -d -H fd://

这解决了这个问题:

service docker restart

我不知道为什么。现在该服务响应:

>curl -D - http://127.0.0.1:8080
HTTP/1.1 200 OK

Hello world

此外,选项--expose 8080对此无效。

编辑:

获得1.6.2工作后,我升级到1.10.2并且还没有看到这个问题。我怀疑主机启动时存在某种竞争条件,但不能肯定地说。也许docker服务脚本需要Required-Start: $network或其他东西。