2个具有不同端口的应用程序,在单个docker-compose和nginx反向代理中

我有一个应用程序与我的本地主机中的app.dev域运行。 但是,我想要有一个不同的端口运行额外的应用程序。 而不是80端口,它将2000域app.dev:2000在app2 /我可以知道我应该对我的docker组成和Nginx做什么改变? 谢谢

这是我的docker写作

version: "2" volumes: mongostorage: services: app: build: ./app ports: - "3000" links: - mongo - redis command: node ./bin/www app2: build: ./app2 ports: - "2000" links: - mongo - redis command: node app.js nginx: build: ./nginx ports: - "80:80" links: - app:app mongo: image: mongo:latest environment: - MONGO_DATA_DIR=/data/db volumes: - mongostorage:/data/db ports: - "27017:27017" redis: image: redis volumes: - ./data/redis/db:/data/db ports: - "6379:6379" 

这是我的ngnix.conf

 events { worker_connections 1024; } http{ upstream app.dev{ least_conn; server app:3000 weight=10 max_fails=3 fail_timeout=30s; } server { listen 80; server_name app.dev; location / { proxy_pass http://app.dev; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } } 

我认为只是以下面的方式更改app2的端口应该是足够的,因为nginx只听端口80。

 app2: build: ./app2 ports: - "2000:2000" links: - mongo - redis command: node app.js 

最简单的方法是在端口2000上公开app2

  app2: build: ./app2 ports: - '2000:2000' 

另一个是通过nginx路由连接,以与第一个应用程序保持一致。

撰写

  nginx: build: ./nginx ports: - '80:80' - '2000:2000' 

Nginx的

 http{ upstream app.dev{ least_conn; server app:3000 weight=10 max_fails=3 fail_timeout=30s; } upstream app2.dev{ least_conn; server app2:2000 weight=10 max_fails=3 fail_timeout=30s; } server { listen 80; server_name app.dev; location / { proxy_pass http://app.dev; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 2000; server_name app.dev; location / { proxy_pass http://app2.dev/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } } 

顺便说一下,你不需要版本2+撰写文件中的任何links 。 您已经可以通过服务名称访问所有服务。