【发布时间】:2018-01-24 12:29:04
【问题描述】:
我正在尝试使用 nginx 反向代理多个容器。
我有 2 个容器,其中节点在 8085 上添加一个监听,在 8086 上添加另一个监听 我希望他们通过
访问node.app1.com
node.app2.com
所以我使用了 jwilder/nginx-proxy:latest,它将位于这两个容器的源代码中,并将充当反向代理。所以这是我的 compose.yml 文件。
docker-compose.yml
version: "3"
services:
node-proxy:
build: ./node-proxy
container_name : node-proxy
restart : always
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
ports:
- 80:80
- 443:443
node-app1:
build: ./app1
container_name : node-app1
restart: always
environment:
VIRTUAL_HOST: node.app1.com
depends_on:
- node-proxy
node-app2:
build: ./app2
container_name : node-app2
restart: always
environment:
VIRTUAL_HOST: node.app2.com
depends_on:
- node-proxy
./node-proxy/Dockerfile
FROM jwilder/nginx-proxy:latest
./app1/app1.js
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World 1\n');
}).listen(8085);
./app1/Dockerfile
FROM node:6.11
WORKDIR /app2
COPY app1.js .
CMD node app1.js
Expose 8085
./app2/app2.js
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World 2\n');
}).listen(8086);
./app2/Dockerfile
FROM node:6.11
WORKDIR /app2
COPY app2.js .
CMD node app2.js
Expose 8086
所以当我这样做时
docker-compose up
我所有的容器都已启动并正在运行
但是 node.app1.com 什么时候做 --> 它说是未知主机。
所以为了检查请求是否到达代理,我尝试从浏览器调用 http://localhost,它显示 503
我还检查了侧容器中的 nginx.config
docker exec -it node-proxy_id bash
cat /etc/nginx/conf.d/
它就在那里,但我想当我做 node.app1.com 请求时不会来代理。 我没有得到我错过的地方,有人可以帮我解决这个问题。
感谢您的宝贵时间
【问题讨论】:
-
那么您的节点应用程序是否分别在 172.18.0.4:8086 和 172.18.0.3:8085 上运行?我可以看到你用来制作它们的配置文件吗?
-
是的,我的两个 hello word 节点应用程序都运行良好,在上面共享的 Dockerfile 中指定了暴露端口。
-
是的,我确实知道端口 8086 和 8085 来自哪里,但是 172.18.0.4 和 172.18.0.3 的 IP 地址来自哪里?
-
这是一个容器IP,在我们组合时自动生成。
标签: node.js docker proxy docker-compose