docker - 无法在 docker compose 中配置具有 php 支持的 nginx 反向代理

标签 docker nginx docker-compose reverse-proxy nginx-reverse-proxy

我一直在尝试在 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/

相关文章:

python - 如何在某些事件中从容器向主机发送信号?

amazon-web-services - 在 AWS elastic beanstalk 上用 nginx 和 php-fpm 替换 Apache/PHP

wordpress - 使用 nginx 为 flask 应用程序启用 wordpress

docker-compose up <service> 无法正确启动 <service>

reactjs - 容器化的 ReactJs 应用程序(来自 nginx 图像)不提供所有路由

docker - 为 Docker 配置 appveyor

shell - 如何使用端口号删除Docker容器

python - 在 Docker 容器中连接 Postgres DB 和模型(Django 和 Flask)

ubuntu - nginx:[emerg] "if"指令在/etc/nginx/nginx.conf:64 中是不允许的

git - 多容器、多存储库项目中的部署文件放在哪里?