django - 如何在 docker 中正确配置 certbot?
问题描述
请帮我解决这个问题,我已经尝试解决了 2 天!请告诉我我做错了什么。我应该改变什么才能让它发挥作用!我应该怎么做才能让它发挥作用。
错误:对于 certbot 无法启动服务 certbot:找不到网络 4d3b22b1f02355c68a900a7dfd80b8c5bb64508e7e12d11dadae11be11ed83dd
我的 docker-compose 文件
version: '3'
services:
nginx:
restart: always
build:
context: ./
dockerfile: ./nginx/Dockerfile
depends_on:
- server
ports:
- 80:80
volumes:
- ./server/media:/nginx/media
- ./conf.d:/nginx/conf.d
- ./dhparam:/nginx/dhparam
- ./certbot/conf:/nginx/ssl
- ./certbot/data:/usr/share/nginx/html/letsencrypt
server:
build:
context: ./
dockerfile: ./server/Dockerfile
command: gunicorn config.wsgi -c ./config/gunicorn.py
volumes:
- ./server/media:/server/media
ports:
- "8000:8000"
depends_on:
- db
environment:
DEBUG: 'False'
DATABASE_URL: 'postgres://postgres:@db:5432/postgres'
BROKER_URL: 'amqp://user:password@rabbitmq:5672/my_vhost'
db:
image: postgres:11.2
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
certbot:
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/usr/share/nginx/html/letsencrypt --email artasdeco.ru@gmail.com --agree-tos --no-eff-email -d englishgame.ru
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/usr/share/nginx/html/letsencrypt
我的 Dockerfile
FROM python:3.7-slim AS server
RUN mkdir /server
WORKDIR /server
COPY ./server/requirements.txt /server/
RUN pip install -r requirements.txt
COPY ./server /server
RUN python ./manage.py collectstatic --noinput
#########################################
FROM nginx:1.13
RUN rm -v /etc/nginx/nginx.conf
COPY ./nginx/nginx.conf /etc/nginx/
RUN mkdir /nginx
COPY --from=server /server/staticfiles /nginx/static
nginx.conf 文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 443 ssl http2;
server_name englishgame.ru;
ssl on;
server_tokens off;
ssl_certificate /etc/nginx/ssl/live/englishgame.ru/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/englishgame.ru/fullchain.pem;
ssl_dhparam /etc/nginx/dhparam/dhparam-2048.pem;
ssl_buffer_size 8k;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
location / {
return 301 https://englishgame.ru$request_uri;
}
}
server {
listen 80;
server_name englishgame.ru;
location ~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html/letsencrypt;
}
location /static {
alias /nginx/static/;
expires max;
}
location /media {
alias /nginx/media/;
expires 10d;
}
location /robots.txt {
alias /nginx/static/robots.txt;
}
location /sitemap.xml {
alias /nginx/static/sitemap.xml;
}
location / {
proxy_pass http://server:8000;
proxy_redirect off;
proxy_read_timeout 60;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
谢谢您的帮助!
解决方案
好的,所以根据错误ERROR: for certbot Cannot start service certbot: network 4d3b22b1f02355c68a900a7dfd80b8c5bb64508e7e12d11dadae11be11ed83dd not found
,问题与您的 compose 文件中定义的任何其他服务无关,因此这些以及您的 Dockerfile 和 nginx 配置应该与问题无关。
然后解决“为什么无法创建certbot服务”的问题。通常,当手动删除为服务配置的网络时,会发生这种错误。然而,在这种情况下,甚至没有服务指的是网络。因此只打印哈希和,而不是任何网络名称。
谷歌搜索错误带来了类似的问题让我们加密:https://github.com/BirgerK/docker-apache-letsencrypt/issues/8,它指向一个实际的 docker compose 问题https://github.com/docker/撰写/问题/5745。
解决方案是使用“--force-recreate”选项运行 docker compose 来解决问题。
所以,问题应该通过运行来解决docker compose up -d --force-recreate
。
推荐阅读
- java - 如何在可执行文件中包含带有 pyinstaller 的特定 .jar 文件?
- flask-oauthlib - Authlib - 隐式流
- c++ - 使用向量从c ++中的文件中反转字符串
- prolog - 不确定单例变量警告和未绑定变量错误
- python - Django Admin Inlines 和 AbstractUser
- unity3d - Google Poly 运行时在 iPhone 上占用 1GB RAM
- java - 无法执行目标 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec 错误与 neo4j
- c# - 从一维数组查看 Reportviewer 中的数据表
- vba - 在 VBA 中引用多个“模板”工作表
- php - 创建一个从 mysqli 查询的结果分成两部分的数组