如何将虚拟主机映射到 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
我正在尝试使用 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