Docker上的Certbot不会为子域创建多个实时文件夹



我运行几个docker容器,在这种情况下,一个运行nginx:alpine和默认certbox/certbox映像的Web服务器。 在 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 撰写文件:

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 my.name@example.com --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)退出,当我去查看 Web 服务器容器时: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 my.name@example.com --agree-tos --no-eff-email --staging --webroot -w /var/www/website1 -d website1.example.com
&& certonly --email my.name@example.com --agree-tos --no-eff-email --staging --webroot -w /var/www/website2 -d website2.example.com"

但这会导致错误:certbot: error: File not found: certonly --email my.name@example.com --a...

如何让 certbot 为两个子域创建证书?或者如何在我的docker-compose.yml文件中使用多个命令而不会让它返回错误?

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

command: certonly --email my.name@example.com --agree-tos --no-eff-email --staging --webroot --cert-name website1.example.com -w /var/www/website1 -d website1.example.com --cert-name website2.example.com -w /var/www/website2 -d website2.example.com

最新更新