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

How to map a virtual host to a container in docker?

我正在尝试使用 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. Instead of accessing the project using http://localhost, I am trying to map it to http://foo.dev but for the life of me I just can't figure out how I can achieve that? One example I have seen is this 访问该网站,但它使用的是不同的图像,而且它也使用 nginx。

我假设 foo/apache-php7 图像是从 nimmis/apache-php7 派生出来的,它基于 Ubuntu 16.04,因此默认情况下,您的 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 地址。

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

ServerName foo.dev

然后我用以下内容更新了我的主机文件:

127.0.0.1 foo.dev www.foo.dev