没有docker-compose的Docker网络反向代理

时间:2017-04-24 21:36:58

标签: networking nginx docker proxy

挑战

如上所述,我想在docker-compose的帮助下实现与docker本身相同的目标。
我希望更深入地了解docker,并且能够在平台上使用docker,而docker-compose不是一个选项。

我目前做什么(使用docker-compose)

1)

我使用这个docker-compose文件:

---
version: '3'

services:
    app:
        build: .

    proxy:
        build: docker/proxy
        ports:
            - "80:80"

" app" service启动一个在端口3002上运行节点的容器(在dockerfile中公开)

"代理" service启动一个运行nginx的容器,其中包括以下conf:

server {
    listen 80;
    server_name app;

    location / {
        proxy_pass  http://app:3002;
    }
}

2)

然后我将它添加到我的主机pc的/ etc / hosts中:

127.0.0.1   app

3)

现在我运行docker-compose up和v http://app,点击节点应用。

很好很简单,对吧?

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

我尝试了什么

1使用相同的nginx配置。

2使用bash脚本启动容器

要做到这一点,我

  1. 创建了一个网络
  2. 将网络添加到两个容器
  3. 设置" app" -container主机名,网络别名和dns-search到" app" (因为我希望其中一个选项会有所帮助)
  4. 这里是剧本:

    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以某种方式使用,我也应该在某种程度上使用它?

    有人可以提出一些建议吗?

    更新 只是信息我从nginx容器中得到了以下日志,我想说这表明nginx无法解析" 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"
    

1 个答案:

答案 0 :(得分:0)

你正在绊倒所有这些选择。您真正需要的只是private boolean tuVariable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.completar_perfil); if(tuVariable){ //si tu variable es true TextView textView = new TextView(this); textView.setText("you message"); } 在容器中设置短格式名称--network-aliasapp,除了容器名称proxy和{{1 }}

dockertest_app