如何将虚拟主机映射到docker中的容器?

时间:2017-04-15 18:17:06

标签: nginx docker docker-compose lamp

我正在尝试使用Docker设置LEMP本地开发环境。以下是我的docker-composer.yml:

version: '2'
services:
  apache:
    build:
      context: ./docker/apache-php7
      dockerfile: Dockerfile
    image: foo/apache-php7
    volumes:
      - .:/var/www/html
    ports:
      - "80:80"
      - "443:443"
    networks:
     - localnet
  node:
    build:
      context: ./docker/node
      dockerfile: Dockerfile
    image: foo/node
    volumes:
     - .:/var/www/html
    networks:
     - localnet
  mysql:
    image: mysql:5.7
    ports:
     - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "root"
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "root"
    volumes:
     - mysqldata:/var/lib/mysql
    networks:
     - localnet
  redis:
    image: redis:alpine
    volumes:
     - redisdata:/data
    networks:
     - localnet
networks:
  localnet:
    driver: "bridge"
volumes:
  mysqldata:
    driver: "local"
  redisdata:
    driver: "local"

我可以转到http://localhost访问该网站。我没有使用http://localhost访问项目,而是试图将其映射到http://foo.dev,但对于我的生活,我无法弄清楚我是如何实现这一目标的?我见过的一个例子是this,但它使用的是另一个图像,它也使用了nginx。

2 个答案:

答案 0 :(得分:2)

我假设foo / apache-php7映像是从基于Ubuntu 16.04的nimmis / apache-php7分叉的,所以默认情况下,无论主机名如何,Apache都会以相同的方式回复HTTP请求。 因此,您唯一需要做的就是在指向服务器的foo.dev DNS区域中设置A / AAAA记录。

看起来该区域在任何情况下都需要注意:

% host foo.dev
foo.dev has address 127.0.53.53
foo.dev mail is handled by 10 your-dns-needs-immediate-attention.dev.

地址记录指向本地主机地址,在您实际位于同一主机上之前,该地址不会起作用。您需要在那里使用全局路由的IP地址。

答案 1 :(得分:0)

我只需要在apache conf文件中为相关网站添加ServerName指令。在我的例子中,它是000-default.conf。我甚至不需要更新主机文件,因为我将Gerd的答案标记为答案,因为这就是我的指示:

ServerName foo.dev

然后我使用以下内容更新了我的hosts文件:

127.0.0.1 foo.dev www.foo.dev