我运行了几个Docker容器,在本例中是一个运行nginx:alpine
的Web服务器和默认的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)
,当我去查看webserver容器时: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
命令更改为:
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]](https://stackoverflow.com/cdn-cgi/l/email-protection) --a...
如何让certbot为两个子域创建证书?或者我如何在docker-compose.yml
文件中使用多个命令而不返回错误?
1条答案
按热度按时间u7up0aaq1#
对于image:
certbot/certbot
- entrypoint是certbot,因此您只能包含一行certbot参数。如果你想生成两个文件夹/使用--cert-name
之前,你点-w -d
第二域/网站2。