【问题标题】:Docker networking reverse proxy without docker-compose没有 docker-compose 的 Docker 网络反向代理
【发布时间】:2017-04-24 21:36:57
【问题描述】:

挑战

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

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

1)

我使用这个 docker-compose 文件:

---
version: '3'

services:
    app:
        build: .

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

“app”服务启动一个容器,该容器在端口 3002 上运行节点(暴露在 dockerfile 中)

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

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 和 vit http://app ,这会命中节点应用程序。

很好很简单,对吧?


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

我尝试过的

1 使用相同的 nginx 配置。

2 使用 bash 脚本启动容器

为了做到这一点,我

  1. 创建了一个网络
  2. 将网络添加到两个容器中
  3. 将“app”-container 主机名、网络别名和 dns-search 设置为“app”(因为我希望其中一个选项会有所帮助)

这里是脚本:

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-compose 以某种方式使用了来自 docker 的 dns 服务,我也应该以某种方式使用它?

谁能给点建议?


更新: 只是我从 nginx 容器中获得以下日志的信息,我会说这表明 nginx 无法解析“应用程序”:

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"

【问题讨论】:

    标签: networking nginx docker proxy


    【解决方案1】:

    所有这些选项都让你自己陷入困境。您真正需要的是--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
    

    【讨论】:

    • 非常感谢您的回答,我试过了,但也没有用。
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多