Docker-compose 和 nginx 代理

标签 docker nginx proxy docker-compose jwilder-nginx-proxy

我正在尝试使用jwilder/nginx-proxy作为我的Angular2应用程序的反向代理,该应用程序分为3个容器(Angular、Express和数据库)。

我尝试了不同的配置来在端口 80 上代理对我的应用程序的请求,但是当我尝试运行 docker-compose 时,我得到:

ERROR: for angular  Cannot start service angular: driver failed programming 
external connectivity on endpoint example_angular_1
(335ce6d0c775b7837eb436fff97bbb56bfdcaece22d51049e1eb4bf5ce45553c): Bind for 
0.0.0.0:80 failed: port is already allocated

虽然消息非常清楚地表明端口 80 上存在冲突,但我无法找到解决方法,但当我将 Angular 容器设置为在端口 4200 上工作时,它工作得很好,但随后我必须指定每次我想访问该页面时,url中的端口号。我正在使用反向代理,因为它不是在我的环境中运行的唯一应用程序

下面是我的docker-compose.yml

version: '3'

services:
    nginx-proxy:
        image: jwilder/nginx-proxy
        container_name: nginx-proxy
        ports: - "80:80"
        volumes: - /var/run/docker.sock:/tmp/docker.sock:ro

    angular:
        build: client
        ports: - "80"
        environment:
            - VIRTUAL_HOST=example.com
            - VIRTUAL_PORT=80
        restart: always

     express:
         build: server
         ports: - "3000:3000"
         links: - database
         restart: always

     database:
         image: mongo
         ports: - "27017:27017"
         restart: always

networks:
  default:
   external:
     name: nginx-proxy

以及用于角度容器的Dockerfile

FROM node:8-alpine as builder

COPY package.json package-lock.json ./

RUN npm set progress=false && npm config set depth 0 && npm cache clean --force

RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app

WORKDIR /ng-app

COPY . .

RUN $(npm bin)/ng build --prod --build-optimizer

FROM nginx:1.13.3-alpine

COPY nginx/default.conf /etc/nginx/conf.d/

RUN rm -rf /usr/share/nginx/html/*

COPY --from=builder /ng-app/dist /usr/share/nginx/html

CMD ["nginx", "-g", "daemon off;"]

EXPOSE 80

最佳答案

问题在于您尝试两次打开主机上的 80 端口。一次用于 nginx-proxy,一次用于 Angular。从角度中删除“端口 80”。

关于Docker-compose 和 nginx 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241789/

相关文章:

ssl - 如何使用 nginx 反向代理在同一端口上从 http 重定向到 https

HTTP 响应问题

Docker compose 端口映射,主机端口 != 容器端口

linux - 适用于 Linux 的 Azure 应用服务是否支持 http2?

nginx 连接到上游 https 时没有实时上游

Angular-cli 使用带有作为命令行参数传递的动态端口的代理

java - 反向代理 : Accessing . 来自 Java Web 应用程序的网络 Web 应用程序

docker - 为什么 "docker push"会推送几张图片,在哪里?

environment-variables - 使用 Docker 的 12 要素配置方法

windows - Windows版Kitematic 0.7.6是否支持卷?