如何在docker中访问来宾IP

时间:2017-11-04 12:00:30

标签: docker docker-compose

我正在使用docker-compose完成我的第一步。我用这个内容创建了一个非常基本的docker-compose.yml文件:

version: '2'
  services:
    webserver:
      build: ./docker/webserver
      image: runwaytest_web
      ports:
        - "80:80"
        - "443:443"
      volumes:
        - /myhome/Docker/simple-docker/www:/var/www/html
        - /myhome/Docker/simple-docker/symfony3:/var/www/symfony3
      links:
        - mysql

     mysql:
       # mysql stuff

我在./docker/webserver中也有一个非常基本的Dockerfile。服务器正确创建。如果我ssh到容器,apache正在运行,配置文件是正确的。

当我从主机检查我的容器时,IP是172.18.0.3,但是我无法ping它,而symfony3的虚拟主机不起作用(实际上我不能到达基本http - /var/www)中的-document文件夹。

我正在使用Docker for Mac。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

请参阅https://stackoverflow.com/a/24149795/99189了解您无法ping通容器的原因。一般来说,不要期望能够做到这一点。您对容器的唯一网络访问是通过您公开的端口,在这种情况下为80和443。

从在docker容器中运行此功能并使用虚拟主机的角度来看,在向Host: / {{1}发出请求时,您需要http客户端发送localhost:80标头}。

假设您正在使用浏览器进行测试,并且您的虚拟主机是localhost:443,请尝试以下操作:

  • 将行user3174311.com添加到您的127.0.0.1 user3174311.com
  • 在浏览器中访问user3174311.com

这是应该发生的事情:

  • 浏览器在/etc/hosts中查找user3174311.com并将其解析为/etc/hosts
  • 浏览器向127.0.0.1
  • 发送带有Host: user3174311.com标头的http请求
  • docker正在侦听此地址,并将连接转发到容器中的端口80
  • apache查看请求,查看127.0.0.1:80标头并确定要使用的正确虚拟主机

之后,它取决于您的apache / symphony3配置。如果它不起作用,您必须发布更多详细信息。