docker - 通过http连接到正在运行的容器

时间:2015-11-13 06:57:42

标签: docker

我已经从以下Docker文件创建了一个docker镜像:

FROM ubuntu:14.04

RUN echo "Europe/London" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata 

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y supervisor
RUN apt-get install -y nginx
RUN apt-get install -y supervisor
RUN apt-get update && apt-get -q -y install lsof
RUN apt-get install net-tools
RUN apt-get install psmisc
RUN apt-get -y install curl

RUN rm -Rf /etc/nginx/conf.d/*
RUN rm /etc/nginx/sites-enabled/default

RUN mkdir /etc/nginx/logs/
RUN touch /etc/nginx/logs/error.log

RUN mkdir /usr/share/nginx/logs/
RUN touch /usr/share/nginx/logs/error.log

ADD ./conf/nginx.conf /etc/nginx/sites-available/default
RUN ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

ADD supervisor.nginx.conf /etc/supervisor.d/nginx.conf

copy ./dist /usr/share/nginx/html/

EXPOSE 80
CMD /usr/bin/supervisord -n

然后我用以下内容构建了图像:

docker build -t dnginx .

然后我创建了一个容器:

docker run --name d3 -d -p 80:80 dnginx

我可以通过运行docker ps -a:

看到容器正在运行并且端口80已暴露
42ba6aa343bd        dnginx              "/bin/sh -c '/usr/bin"   2 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   d3

我可以通过运行docker inspect --format '{{ .NetworkSettings.IPAddress }}' d3

找到IP地址

但是如果尝试从IP地址点击网址,我无法连接到容器:

curl http://172.17.0.2我收到以下回复

  

无法连接到127.17.0.2端口80:操作超时

我无法ping通ip地址

我错过了什么?

2 个答案:

答案 0 :(得分:2)

获取docker-machine ip并使用访问你的nginx

docker-machine ls<显示你的(s)docker(s)-machine(s)

查看您要访问的计算机的名称,并:

docker-machine ip <name>&lt;如果您的docker-machine

显示IP地址

尝试使用此IP

访问您的nignx

答案 1 :(得分:2)

命令docker run --name d3 -d -p 80:80 dnginx表示您将主机上的端口80映射到docker容器中的端口80.

您可以在docker ps输出中看到0.0.0.0:80->80/tcp

的映射

这样,如果您的主机上有curl 127.0.0.1curl your-ip-here,您的请求会自动路由到将为流量提供服务的nginx容器。

无需查找容器的私有IP。您可以使用任何主机的IP地址。