docker 上的 certbot 不会为子域创建多个活动文件夹

问题描述 投票:0回答:2

我运行了几个 docker 容器,在本例中是一个运行

nginx:alpine
和默认
certbox/certbox
图像的网络服务器。 在 Nginx 容器上,我为具有静态网站的子域运行 2 个服务器部分。主域运行在不同的VPS上,所以我为这两个子域做了特定的A记录。

这是我的

nginx.conf

server {
  listen 80;
  listen [::]:80;

  root /var/www/website1;
  index index.html;

  server_name website1.example.com;

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

  location ~ /.well-known/acme-challenge {
    allow all;
    root /var/www/website1;
  }
}

server {
  listen 80;
  listen [::]:80;

  root /var/www/website2;
  index index.html;

  server_name website2.example.com;

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

  location ~ /.well-known/acme-challenge {
    allow all;
    root /var/www/website2;
  }
}

正如预期的那样,我可以看到两个网站都在子域上运行。

但是当我尝试在两个站点上运行 certbot 时,仅创建一个文件夹(第一个子域的文件夹)!

这是我用于此目的的 docker compose 文件:

version: '3'

services:
  webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - website1:/var/www/website1
      - website2:/var/www/website2
      - ./nginx-conf:/etc/nginx/conf.d:ro
      - certbot-etc:/etc/letsencrypt
      - certbot-var:/var/lib/letsencrypt
    networks:
      - app-network

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - certbot-var:/var/lib/letsencrypt
      - website1:/var/www/website1
      - website2:/var/www/website2
    depends_on:
      - webserver
    command: certonly --email [email protected] --agree-tos --no-eff-email --staging --webroot -w /var/www/website1 -d website1.example.com -w /var/www/website2 -d website2.example.com

volumes:
  certbot-etc:
  certbot-var:
  website1:
    driver: local
    driver_opts:
      type: none
      device: /home/user/html/website1/
      o: bind
  website2:
    driver: local
    driver_opts:
      type: none
      device: /home/user/html/website2/
      o: bind

networks:
  app-network:
    driver: bridge

certbot 容器运行良好,以

(0)
退出,当我查看网络服务器容器时:
sudo docker-compose exec webserver ls -la /etc/letsencrypt/live
我得到以下信息:

total 16
drwx------    3 root     root          4096 Feb  7 20:05 .
drwxr-xr-x    9 root     root          4096 Feb  8 12:19 ..
-rw-r--r--    1 root     root           740 Feb  7 20:05 README
drwxr-xr-x    2 root     root          4096 Feb  7 20:05 website1.example.com

因此第二个子域未创建。

我还尝试通过将

docker-compose.yml
命令更改为:

来添加两个不同的 certonly 运行
command: >
      sh -c "certonly --email [email protected] --agree-tos --no-eff-email --staging --webroot -w /var/www/website1 -d website1.example.com
          && certonly --email [email protected] --agree-tos --no-eff-email --staging --webroot -w /var/www/website2 -d website2.example.com"

但这会导致错误:

certbot: error: File not found: certonly --email [email protected] --a...

如何让 certbot 为两个子域创建证书?或者我如何在我的

docker-compose.yml
文件中使用多个命令而不返回错误?

docker nginx docker-compose certificate certbot
2个回答
1
投票

对于图像:

certbot/certbot
- 入口点是 certbot,因此您只能包含一行 certbot 参数。 如果您想生成两个文件夹/在指向第二个域/网站2之前使用
--cert-name
-w -d



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.