dockernetworking反向代理没有docker组成

挑战

如上所述,我希望通过docker-compose的帮助完成与docker本身相同的目标。
我想深入了解docker,并启用在docker-compose不可用的平台上使用docker的能力。

我现在做什么(用docker工作)

1)

我使用这个docker-compose文件:

--- version: '3' services: app: build: . proxy: build: docker/proxy ports: - "80:80" 

“应用程序”服务启动一个容器,该容器在端口3002上运行节点(显示在dockerfile中)

“代理”服务启动一个容器,运行一个nginx,其中包括以下的configuration:

 server { listen 80; server_name app; location / { proxy_pass http://app:3002; } } 

2)

然后,我将这添加到我的主机的/ etc / hosts:

 127.0.0.1 app 

3)

现在我运行docker-compose up和vist http:// app ,命中节点应用程序。

很好很简单,对吧?


现在我只想和docker做同样的事情。

我试过了

1使用相同的nginxconfiguration。

2用bash脚本启动容器

为了完成这个我

  1. 创build了一个networking
  2. 将networking添加到两个容器
  3. 设置“应用程序”容器主机名,networking别名和DNSsearch到“应用程序”(因为我希望其中的一个选项将有所帮助)

这里的脚本:

 docker network create --driver bridge dockertest_nw docker build -t dockertest_app . docker create \ --name dockertest_app_con \ --network dockertest_nw \ --hostname app \ --network-alias=app \ --dns-search=app \ dockertest_app docker build -t dockertest_proxy ./docker/proxy/ docker create \ --name dockertest_proxy_con \ --network dockertest_nw \ --hostname proxy \ --network-alias=proxy \ --dns-search=proxy \ -p 80:80 \ dockertest_proxy docker start dockertest_proxy_con docker start dockertest_app_con 

不幸的是,这是行不通的。

我也知道有一个来自docker的dns服务,docker-compose以某种方式使用,我也应该用某种方式?

有没有人可以提出一些build议?


更新:只是我从nginx容器中得到了以下日志的信息,我会说nginx不能parsing“app”:

 172.18.0.1 - - [13/Apr/2017:14:49:06 +0000] "GET / HTTP/1.1" 502 576 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" "-" 2017/04/13 14:49:06 [error] 5#5: *13 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: app, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3002/", host: "app" 

你正在用自己的方式来绊倒自己。 所有你真正需要的是--network-alias在容器中设置简短的表单名称appproxy ,除了容器名称dockertest_appdockertest_proxy之外,它们将是可用的。

 docker network create --driver bridge dockertest_nw docker build -t dockertest_app . docker create \ --name dockertest_app \ --network dockertest_nw \ --network-alias=app \ dockertest_app docker build -t dockertest_proxy ./docker/proxy/ docker create \ --name dockertest_proxy \ --network dockertest_nw \ --network-alias=proxy \ -p 80:80 \ dockertest_proxy docker start dockertest_proxy docker start dockertest_app