首页 > 解决方案 > 如何在同一台机器上使用 docker 为一个项目托管多个环境?

问题描述

我有一个由 ++ 组件组成的典型nginxWebdjango堆栈database

我已经将它们设置在不同的 docker 容器中,docker-compose并且运行良好。

services:
  billing_app_dev:
    image: jameslin/billing_app:latest
    expose:
      - 8000
  billing_postgres:
    image: postgres:10.5
    restart: always
    volumes:
      - pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  billing_nginx:
    image: jameslin/billing_nginx:${TAG}
    volumes:
      - app_files:/static
    links:
      - 'billing_app'
    ports:
      - 80:80

现在我想知道如何在一台机器上设置DEVQA环境。我可以更改djangodatabase容器来监听不同的端口,但看起来我不能nginx单独运行容器,因为端口 80 只能被一个容器监听。

我将不得不nginx为这两个看起来不太干净的环境共享容器。

如果无法运行 2 个虚拟机,是否有更好的想法?

标签: dockernginx

解决方案


我有 3 个 apache 容器和 1 个 nginx 在同一台服务器上运行,所以很确定这不是问题。

对于每个 webserver + 数据库堆栈,我有一个不同的 docker-compose 文件,这样 docker 将为每个堆栈创建不同的网络,避免同时端口可能出现的问题,并且您只需将您的 nginx 绑定到您的不同端口服务器,因为,您只能将一项服务绑定到一个端口。尽管如此,每个容器都是一个独立的“机器”,所以即使在同一个网络上,它们也可以使用同一个端口。

如果您确实需要在服务器的端口 80 和 443 中运行所有服务,可能需要在这些端口中运行 nginx,例如在内部 docker 网络中调用这些服务的反向代理,这是一个选项,但我从不在通过 docker 内部网络之前尝试一下。


推荐阅读