You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Docker容器启动遇443端口占用,Traefik与Nginx共存咨询

问题:宿主机Nginx与Docker化Django项目的路由共存配置

问题背景

我用树莓派搭建了家庭服务器,已经部署了带SSL的Nginx,运行静态站点和个人网站。近期通过cookie-cutter-django构建Docker化项目,启动时Traefik出现如下错误:

Error response from daemon: driver failed programming external connectivity on endpoint new_project-traefik-1 (4759d36b8b42f426d3e20b933661d8628b23e9bfbe7c5942c9ac9e8f1e616f69):
Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use

执行sudo netstat -pna | grep 443和sudo lsof -i -P -n | grep 443后,确认宿主机Nginx进程占用了443端口。

我不确定已有宿主机Nginx的情况下是否仍需Traefik,尝试移除项目内Traefik和Nginx配置后出现504错误。现需解决宿主机Nginx与容器化项目共存,以及多域名多项目(容器/非容器)的路由配置问题。

相关配置

1. 树莓派宿主机Nginx sites-available配置

server {
    listen 443 ssl;

    listen [::]:443 ssl;

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_certificate /etc/nginx/ssl/new_project.crt;
    ssl_certificate_key /etc/nginx/ssl/new_project.key;
    root /var/www/html/new_project;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name new_project.com *.new_project.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

server {
    listen 443 ssl;

    listen [::]:443 ssl;

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_certificate /etc/nginx/ssl/new_project.crt;
    ssl_certificate_key /etc/nginx/ssl/new_project.key;

    root /var/www/html/new_project_staging;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name staging.new_project.com;

    location / {
       try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
# force to https
server {
    listen 80;
    listen [::]:80;

    server_name new_project.com *.new_project.com;

    return 301 https://$host$request_uri;
}

2. 项目中production.yml的Traefik配置

traefik:
    build:
      context: .
      dockerfile: ./compose/production/traefik/Dockerfile
    image: new_project_production_traefik
    depends_on:
      - django
    volumes:
      - production_traefik:/etc/traefik/acme
    ports:
      - "0.0.0.0:80:80"
      - "0.0.0.0:443:443"
      - "0.0.0.0:5555:5555"

3. 项目中traefik.yml配置

log:
  level: INFO

entryPoints:
  web:
    # http
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: web-secure

  web-secure:
    # https
    address: ":443"

  flower:
    address: ":5555"

certificatesResolvers:
  letsencrypt:
    acme:
      email: "admin@new_project.com"
      storage: /etc/traefik/acme/acme.json
      httpChallenge:
        entryPoint: web

http:
  routers:
    web-secure-router:
      rule: "Host(`new_project.com`) || Host(`www.new_project.com`)"
      entryPoints:
        - web-secure
      middlewares:
        - csrf
      service: django
      tls:
        certResolver: letsencrypt

    flower-secure-router:
      rule: "Host(`new_project.com`)"
      entryPoints:
        - flower
      service: flower
      tls:
        certResolver: letsencrypt

    web-media-router:
      rule: "(Host(`new_project.com`) || Host(`www.new_project.com`)) && PathPrefix(`/media/`)"
      entryPoints:
        - web-secure
      middlewares:
        - csrf
      service: django-media
      tls:
        certResolver: letsencrypt

  middlewares:
    csrf:
      headers:
        hostsProxyHeaders: ["X-CSRFToken"]

  services:
    django:
      loadBalancer:
        servers:
          - url: http://django:5000

    flower:
      loadBalancer:
        servers:
          - url: http://flower:5555

    django-media:
      loadBalancer:
        servers:
          - url: http://nginx:80

providers:
  file:
    filename: /etc/traefik/traefik.yml
    watch: true

4. 项目内的Nginx配置(容器内)

server {
  listen       80;
  server_name  localhost;
  location /media/ {
    alias /usr/share/nginx/media/;
  }
}

额外疑问

cookie-cutter-django自动生成的上述项目内Nginx配置是否必要?


内容的提问来源于stack exchange,提问作者jisoooh0202

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:23:10