use*_*854 6 apache nginx docker
我在这里问了一个问题并解决了我的部分问题,但我被建议创建另一个问题,因为它在评论中开始变得有点冗长。
我正在尝试使用 docker 在我的 Mac 上运行多个基于 PHP、MySQL 和 Apache 的应用程序,所有这些应用程序都将使用不同的docker-compose.yml
文件(我链接的帖子中有更多详细信息)。我有很多存储库,其中一些存储库相互通信,而且并非所有存储库都是相同的 PHP 版本。正因为如此,我认为将 20 多个单独的存储库塞进一个 docker-compose.yml 文件中对我来说是不明智的。我想为每个存储库使用单独的 docker-compose.yml 文件,并且我希望能够/etc/hosts
为每个应用程序使用一个条目,这样我就不必指定端口。例如:我会访问 2 个不同的存储库,例如http://dockertest.com
和http://dockertest2.com
(使用/etc/hosts
条目),而不必像http://dockertest.com:8080
和一样指定端口http://dockertest.com:8081
。
使用我另一篇文章中接受的答案,我能够一次运行一个应用程序(一个 docker-compose.yml 文件),但是如果我尝试用docker-compose up -d
它启动另一个应用程序会导致错误,因为端口 80 已经被占用。如何同时运行多个 docker 应用程序,每个应用程序都有自己的docker-compose.yml
文件,而不必在 url 中指定端口?
这是我制作的应用程序的 docker-compose.yml 文件。在我的/etc/hosts
我有127.0.0.1 dockertest.com
version: "3.3"
services:
php:
build: './php/'
networks:
- backend
volumes:
- ./public_html/:/var/www/html/
apache:
build: './apache/'
depends_on:
- php
- mysql
networks:
- frontend
- backend
volumes:
- ./public_html/:/var/www/html/
environment:
- VIRTUAL_HOST=dockertest.com
mysql:
image: mysql:5.6.40
networks:
- backend
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
nginx-proxy:
image: jwilder/nginx-proxy
networks:
- backend
ports:
- 80:80
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
frontend:
backend:
Run Code Online (Sandbox Code Playgroud)
Art*_*kov 11
我建议将其提取nginx-proxy
到一个单独的docker-compose.yml
并使用以下内容为“反向代理”配置创建一个存储库:
包含要添加的额外内容的文件 /etc/hosts
127.0.0.1 dockertest.com
127.0.0.1 anothertest.com
127.0.0.1 third-domain.net
Run Code Online (Sandbox Code Playgroud)
而 adocker-compose.yml
将只有反向代理
version: "3.3"
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- 80:80
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
Run Code Online (Sandbox Code Playgroud)
接下来,正如您已经提到的,docker-compose.yml
为充当 Web 端点的每个存储库创建一个。您需要将VIRTUAL_HOST
env var添加到为您的应用程序(例如 Apache)提供服务的服务中。
该nginx-proxy
容器可在“永久模式”运行,因为它具有占地面积小。这样,每当您使用VIRTUAL_HOST
env var启动新容器时,其配置nginx-proxy
将自动更新以包含新的本地域。(您仍然需要/etc/hosts
使用新条目进行更新)。
如果您决定使用网络,则您的 Web 端点容器必须与 位于同一网络中nginx-proxy
,因此您的 docker-compose 文件必须像这样修改:
# nginx-proxy/docker-compose.yml
version: "3.3"
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- 80:80
networks:
- reverse-proxy
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
reverse-proxy:
Run Code Online (Sandbox Code Playgroud)
# service1/docker-compose.yml
version: "3.3"
services:
php1:
...
networks:
- backend1
apache1:
...
networks:
- nginx-proxy_reverse-proxy
- backend1
environment:
- VIRTUAL_HOST=dockertest.com
mysql1:
...
networks:
- backend1
networks:
backend1:
nginx-proxy_reverse-proxy:
external: true
Run Code Online (Sandbox Code Playgroud)
# service2/docker-compose.yml
version: "3.3"
services:
php2:
...
networks:
- backend2
apache2:
...
networks:
- nginx-proxy_reverse-proxy
- backend2
environment:
- VIRTUAL_HOST=anothertest.com
mysql2:
...
networks:
- backend2
networks:
backend2:
nginx-proxy_reverse-proxy:
external: true
Run Code Online (Sandbox Code Playgroud)
在reverse-proxy
其中创建的网络在其他 docker-compose 文件中nginx-proxy/docker-compose.yml
被引用,nginx-proxy_reverse-proxy
因为每当您定义网络时 - 它的最终名称将是{{folder name}}_{{network name}}
如果您想查看依赖于浏览器代理扩展而不是 的解决方案/etc/hosts
,请查看mitm-proxy-nginx-companion
归档时间: |
|
查看次数: |
3321 次 |
最近记录: |