我一直在尝试在 docker compose 中配置具有 php 支持的 nginx 反向代理,该代理在端口 3838 上运行应用程序服务。我希望应用程序在端口 80 上运行 nginx-proxy。我已经在线梳理了几个教程,但没有一个有帮我解决了问题。我也尝试关注这个 https://github.com/dmitrym0/simple-lets-encrypt-docker-compose-sample/blob/master/docker-compose.yml但它没有用。这是我当前的 docker compose 文件。
docker-compose.yml
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "82:80"
- "444:443"
volumes:
- "/etc/nginx/vhost.d"
- "/usr/share/nginx/html"
- "/var/run/docker.sock:/tmp/docker.sock:ro"
- "/etc/nginx/certs"
app:
build:
context: .
dockerfile: ./app/Dockerfile
image: rocker/shiny
container_name: docker-app
restart: always
ports:
- 3838:3838
我是不是错过了什么。有时我会看到 docker-compose 文件中包含 virtual_host 环境变量。有必要吗?我还必须手动配置 nginx 配置文件并将它们附加到 jwilder/nginx-proxy dockerfile 吗?我是 docker 的新手,我真的需要一些帮助。
最佳答案
请引用多个端口 nginx-proxy 的部分官方文档。在您的情况下,除了设置强制性 VIRTUAL_HOST
env 变量(没有这个容器不会被 nginx-proxy
服务反向代理),你必须设置 VIRTUAL_PORT
变量为 nginx-proxy
将默认为在端口 80
上运行的服务, 但你的 app
服务绑定(bind)到 3838
港口。
试试这个docker-compose.yml
文件看看它是否有效:
version: "3"
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
app:
build:
context: .
dockerfile: ./app/Dockerfile
image: rocker/shiny
container_name: docker-app
restart: always
expose:
- 3838
environment:
- VIRTUAL_HOST=app.localhost
- VIRTUAL_PORT=3838
关于docker - 无法在 docker compose 中配置具有 php 支持的 nginx 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345663/