如何运行连接到 nginx 的 docker 容器

时间:2021-04-25 17:00:17

标签: docker nginx

所以我有一个 DigitalOcean 服务器和一个有效的域名,我想为我的后端获得 HTTPS 支持。我想使用 Let's Encrypt,我所看到的使用它的常用方法是与 Nginx 结合使用。我很困惑我应该如何运行它。如果我运行我的 docker 容器而不是端口 80 已经在使用,这意味着 nginx 服务无法启动,但是如果我启动 nginx,我就不能卷曲我的后端。

这是我后端的 Dockerfile

FROM tiangolo/uvicorn-gunicorn:python3.8

LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"

WORKDIR /app/backend

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
EXPOSE 8000
COPY . .
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]

这是我的 nginx 配置

server{
        listen 80;
       server_name example.xyz www.example.xyz;
       location / {
           include proxy_params;
           proxy_pass http://127.0.0.1:8000;
       }
}


我可以 curl 到 example.com 并获得 200 和 localhost:80

编辑: 我现在不能 curl 到我的域名,但我可以 curl 到 localhost:8000

1 个答案:

答案 0 :(得分:1)

您有几个不同的选择,但首先将 uvicorn 设置为在另一个端口(例如 8080)上运行可能是最简单的

然后使用 -p to map ("publish") 容器的 web 端口到主机的一个(您可以设置任何端口之间的映射,但使其相同可以简化未来的理解)

docker run ... -p 8080:8080

然后在您的 nginx 配置中,将其设置为 proxy_pass 到您的映射端口

    proxy_pass http://127.0.0.1:8080;

执行此操作后重新启动 nginx 以获取新配置