我在使用Docker和LetsEncrypt时遇到了麻烦。
据我所知,Certbot(在Apache或任何HTTP服务器上安装LetsEncrypt的机器人)会检查用户是否拥有与证书关联的域。
所以在Dockerfile中,我添加以下行:
RUN certbot --apache -n --agree-tos --email me@mail.com -d domain.tld
问题是在域检查期间,Certbot会在HTTP Server上安装证书,并检查此服务器是否通过解析域来公开已安装的证书。
我的意思是,只有在在线Web服务器上运行cerbot命令时,域检查才能正常工作。
但是在Docker镜像构建期间没有启动Apache服务器。
你有任何想法解决这个问题吗?我可以在启动容器后执行命令,但我想在Dockerfile中安装证书。
谢谢
答案 0 :(得分:6)
您应该从apache映像中删除certbot,然后在blacklabelops / letsencrypt这样的单独容器中运行letsencrypt。
必须在Webroot模式下启动letsencrypt容器:
$ docker run -d \
-v letsencrypt_certificates:/etc/letsencrypt \
-v letsencrypt_challenges:/var/www/letsencrypt \
-e "LETSENCRYPT_WEBROOT_MODE=true" \
-e "LETSENCRYPT_EMAIL=dummy@example.com" \
-e "LETSENCRYPT_DOMAIN1=example.com" \
--name letsencrypt \
blacklabelops/letsencrypt
注意:此处的证书将写入docker卷
letsencrypt_certificates
,网络质询将写入letsencrypt_challenges
您的apache必须安装该卷并在webroot下发布挑战:/.well-known/acme-challenge/
。
示例,letsencrypt_challenges下的文件必须在以下位置访问:
http(s)://yourdomain.com/.well-known/acme-challenge/