我是码头工的新手。我正在创建一个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
答案 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