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
。 您已经可以通过服务名称访问所有服务。