【问题标题】:use nginx as reverse proxy for a docker container使用 nginx 作为 docker 容器的反向代理
【发布时间】:2022-02-07 00:27:04
【问题描述】:

我不熟悉同时使用 docker 和 nginx,所以我提前为我的简单问题道歉,尽管在 youtube 上浏览了许多资源,但我无法得到答案。

我创建了一个 ubuntu 服务器并运行了以下命令

sudo apt install nginx

现在我有一个非常简单的烧瓶应用程序 docker 镜像(在 docker hub 上公开可用,不是我开发的),我想将我的 nginx 配置为运行上述镜像的容器的反向代理。

我的nginx配置中反向代理的代码如下:

server{
    listen 80;
    location / {
        proxy_pass "http://192.168.0.20:8000"
    }
}

192.168.0.20 是我的服务器 ip,8000 是我转发 docker 容器的主机端口,例如

docker container run -p 8000:5000 <image>

但是当我运行 http://192.168.0.20/ 时,它会打开默认的 nginx index.html,而我希望它转发到我的应用程序容器以提供该静态文件,因为当我运行 http://192.168.0.20:8000/ 时,它会给出我想要的输出。

这听起来像是一个愚蠢的问题,但我一直在努力掌握 nginx。

提前感谢您的帮助!!!

【问题讨论】:

  • 当你想让容器相互通信时,你应该将它们添加到同一个docker网络中,并使用服务名作为主机名。尝试连接到您的主机 IP 是错误的方法。最简单的方法是使用docker-compose 一起运行容器,它将为堆栈中的所有容器使用默认网络。
  • 我没有 nginx 作为容器,而是直接安装在 ubuntu 服务器上,只有一个图像。我也不知道在哪里设置 docker compose。
  • 如何将 nginx 配置放入容器中?因为它为您提供了默认的欢迎页面,所以它似乎没有选择您的配置。
  • @HansKilian 我想我可能错过了这一步,因为我似乎无法找到进入容器或可以映射配置卷的位置

标签: docker nginx


【解决方案1】:

要从容器内访问主机,您不能使用 192.168.0.20,因为该地址在容器内是未知的。根据您的主机操作系统,您可以使用 172.17.0.1 (Linux) 或 host.docker.internal (Windows)。如果您的操作系统是 Linux,则应将配置更改为

server {
    listen 80;
    location / {
        proxy_pass "http://172.17.0.1:8000/"
    }
}

您可以使用 docker hub 上提供的 nginx 映像,而不是自己安装 nginx。要将配置文件放入其中,请将其复制到 /etc/nginx/conf.d/default.conf。创建一个包含

的Dockerfile
FROM nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf

构建并运行它

docker build -t mynginx .
docker run -d -p 80:80 mynginx

现在您应该可以转到 http://192.168.0.20/ 并从 Flask 应用程序中获得响应。

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2018-03-20
    • 2020-09-10
    • 1970-01-01
    • 2021-09-30
    • 2019-05-04
    相关资源
    最近更新 更多