Blog

Punto barra en volúmenes de docker: named volume vs host volume

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.