gpt4 book ai didi

docker - 如何在 Docker 之外将 NGINX 反向代理到 proxy_pass 到 docker 容器

转载 作者:行者123 更新时间:2023-12-02 17:58:57 24 4
gpt4 key购买 nike

我有一个 NGINX 在 CentOS 服务器上运行,并且想通过 proxy_pass 来运行在同一主机上运行的 docker 容器。

当使用带有容器 IP 的 proxy_pass 时,它可以工作,但是如果机器重新启动,有时容器的 IP 会发生变化,并且必须手动编辑 nginx.conf 以重新指向容器的新 IP。我知道 NGINX 可以在它自己的 docker 容器中设置并链接到其他正在运行的容器,但这需要很长时间来设置和测试。

有没有办法以某种方式使用容器名称或其他不会直接在主机的 NGINX 上更改的标识符?

最佳答案

I know that NGINX can be setup inside of its own docker container and linked to other running containers but that would take a long time to setup and test.



简短的回答

如果你不想在它自己的容器中运行 nginx,你可以创建一个具有固定 IP 范围的 docker 网络:
docker network create --driver=bridge --subnet=192.168.100.0/24 nginx.docker

并使用固定 IP 启动您的容器
docker run --net nginx.docker --ip 192.168.100.1 ...

docker network createAssign static IP to Docker container

长答案

但我仍然建议在容器中运行 nginx,然后 docker 将负责 DNS 解析和路由。它实际上很快就完成了,而且非常简单。您可以在一个 docker-compose.yml 中定义所有服务并确保他们都共享同一个网络或:
  • 使用 docker network create nginx.docker 创建一个 docker 网络
  • 将网络添加到 docker-compose.yml您的服务文件
  • 调整您的nginx.conf

  • 例如:

    nginx
    docker-compose.yml nginx的
    services:
    nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - type: bind
    source: ./nginx.conf
    target: /etc/nginx/nginx.conf
    networks:
    - nginx.docker

    networks:
    nginx.docker:
    name: nginx.docker
    external: true

    请注意 "80:80"将绑定(bind)到所有接口(interface),使用接口(interface)的 IP,例如 "192.168.0.1:80:80"只绑定(bind)到一个特定的接口(interface)。

    您的服务容器
    docker-compose.yml
    services:
    my_service:
    image: image_name
    container_name: myservice
    networks:
    - nginx.docker

    networks:
    nginx.docker:
    name: nginx.docker
    external: true

    nginx 配置

    在您的 nginx.conf 的服务器部分中:
    server {
    listen 443 ssl;
    server_name your.server.name;

    # Docker DNS
    resolver 127.0.0.11;
    set $upstream_server http://myservice:8080; # or myservice.nginx.docker

    location / {
    proxy_pass $upstream_server;

    # further proxy config ...
    }
    }

    注意 resolver 127.0.0.11明确告诉 nginx 使用 docker DNS。不确定是否仍然需要它,但我之前在不使用它时遇到了问题。

    关于docker - 如何在 Docker 之外将 NGINX 反向代理到 proxy_pass 到 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823279/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com