Punto barra en volúmenes de docker: named volume vs host volume
Hoy he tenido un error muy tonto al ejecutar certbot de Let’s Encrypt con docker-compose. Lo he ejecutado con --webroot
, que tiene que escribir en el directorio root de nuestro servidor web. En mi caso, /opt/my_wordpress/www_kaisha
, que está montado por el contenedor de WordPress (que contiene tanto PHP como Apache):
j@akane /opt/my_wordpress % docker run --rm -ti \ [1]
-v www_kaisha:/var/www \
-v var_log_letsencrypt:/var/log/letsencrypt \
-v etc_letsencrypt:/etc/letsencrypt \
certbot/certbot certonly --dry-run --webroot -w /var/www -d www.XXXX.net --email yiguro@gmail.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Simulating a certificate request for www.XXXX.net
Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
Domain: www.XXXX.net
Type: unauthorized
Detail: 2a03:c7c0:40::1: Invalid response from http://www.XXXX.net/.well-known/acme-challenge/p68NyoHN9PezuirxJppI3hOnrv7V0a0LitwBji9rGHY: 404
Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet.
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
El error es que en los volúmenes, que se corresponden con directorios, no he utilizado ./
, por lo que Docker los interpreta como named volume en lugar de host volume:
j@akane /opt/my_wordpress % docker volume list
DRIVER VOLUME NAME
[...]
local etc_letsencrypt
local var_log_letsencrypt
local www_kaisha
Al anteponer ./
todo ha funcionado bien:
j@akane /opt/my_wordpress % docker run --rm -ti \
-v ./www_kaisha:/var/www \
-v ./var_log_letsencrypt:/var/log/letsencrypt \
-v ./etc_letsencrypt:/etc/letsencrypt \
certbot/certbot certonly --dry-run --webroot -w /var/www -d www.XXXX.net --email <email>
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Simulating a certificate request for www.XXXX.net
The dry run was successful.