docker:尝试连接到已发布的端口

时间:2016-02-02 22:54:43

标签: apache docker centos centos7

我是码头工的新手。我正在创建一个Hello,World示例。我试图做的就是在Docker中启动Apache,然后从主机查看默认网站。

Dockerfile

FROM centos:latest

RUN yum install epel-release -y

RUN yum install wget -y

RUN yum install httpd -y

EXPOSE 80

ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]

然后我建立它: > docker build .

然后我标记它:

docker tag 17283f566320 my:apache

然后我运行它:

> docker run -p 80:9191 my:apache
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

然后运行......

在另一个终端窗口中,我尝试发出curl命令来查看默认网站。

> curl -XGET http://0.0.0.0:9191
curl: (7) Failed to connect to 0.0.0.0 port 9191: Connection refused

> curl -XGET http://localhost:9191
curl: (7) Failed to connect to localhost port 9191: Connection refused

> curl -XGET http://127.0.0.1:9191
curl: (7) Failed to connect to 127.0.0.1 port 9191: Connection refused

或者我尝试localhost

为了确保我的端口正确,我运行它:

> docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
5aed4063b1f6        my:apachep      "/usr/sbin/httpd -D F"   43 seconds ago      Up 42 seconds       80/tcp, 0.0.0.0:80->9191/tcp   angry_hodgkin

3 个答案:

答案 0 :(得分:3)

尽管您在本地计算机中创建了容器。这些实际上是在不同的机器(虚拟机)上运行的

首先,检查您的docker机器(虚拟机)的IP是什么

$docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100  

然后运行curl命令查看容器内apache Web服务器上的默认网站

curl http://192.168.99.100:9191

答案 1 :(得分:1)

如果您在Ubuntu计算机上运行docker作为本机,您应该能够使用localhost访问您的容器。 如果您使用的是Mac或Windows,则Docker容器不会在本地主机上运行,​​而是在其IP上运行。您可以使用命令docker inspect <container id> | grep IPAddress获取容器ip,或者如果您使用的是docker-machine docker-machine ip <docker_machine_name> 相关信息:

所以你的卷曲调用应该是这样的curl <container_ip>:<container_exposed_port>

你也可以使用param -t在build命令上标记你的图像,如下所示: docker build -t my:image .

另一个提示是,您可以通过组合yum install命令来优化您的dockerfile:

RUN yum install -y \ 
    epel-release \
    wget \
    httpd

http://blog.tutum.co/2014/10/22/how-to-optimize-your-dockerfile/

答案 2 :(得分:1)

感谢所有人。我的港口被逆转了:

> docker run -p 9191:80 my:apache