Dockerized certbot не может найти смонтированный каталог

#docker-compose #web-deployment #lets-encrypt #docker-volume #certbot

#docker-compose #веб-развертывание #позволяет зашифровать #docker-volume #certbot

Вопрос:

Я пытаюсь развернуть свою службу на виртуальной машине, и у меня есть эта часть в моем docker-compose.yaml:

 certbot:
container_name: certbot
image: certbot/certbot:v1.9.0
logging:
  driver: "json-file"
  options:
    max-size: 500m
volumes:
  - {vm_path}/certbot/certbot-etc:/etc/letsencrypt
  - {vm_path}/certbot/certbot-var:/var/lib/letsencrypt
  - {vm_path}/nginx/certbot-web-root:/var/www/certbot/html
  - /etc/localtime:/etc/localtime:ro
  - /etc/timezone:/etc/timezone:ro
command:
  - certonly
  - --webroot
  - -w /var/www/certbot/html
  - --email={email}
  - --agree-tos
  - --no-eff-email
  - --dry-run
  - -d {domain}
  

но когда я запускаю docker-compose up , я получаю эту ошибку от certbot:

certbot | /var/www/certbot/html does not exist or is not a directory

также каталог {vm_path}/nginx/certbot-web-root:/var/www/certbot/html существует на моей виртуальной машине и является абсолютным.

——ОБНОВЛЕНИЕ: ОС моей виртуальной машины — Ubuntu 18.04. Я проверил docker-compose config , и в этом нет проблем. Также результат run ls -l /var/www/certbot :

  certbot        | total 4
 certbot        | drwxr-xr-x    2 1001     1001     4096 Nov  4 10:54 html
  

а также /var/www/certbot/html/ существует и пуст.

Комментарии:

1. Попробуйте запустить docker-compose config и убедитесь, что пути к томам соответствуют вашим ожиданиям. Если это хорошо, попробуйте запустить контейнер, заменив команду чем-то вроде ls -l /var/www/certbot . Таким образом, вы можете заглянуть внутрь контейнера и лучше увидеть, что было смонтировано

2. @Mihai Спасибо, я не смог найти ничего необычного в docker-compose config . Как мне следует запустить ls -l /var/www/certbot ? Я не смог запустить его с помощью команды в docker-compose. Я получил этот вывод: certbot | usage: certbot | certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

3. Вам также необходимо перезаписать точку входа. Просто добавьте entrypoint: ls -l /var/www/certbot и удалите command полностью

4. @Mihai Спасибо. Вывод: certbot | total 4 certbot | drwxr-xr-x 2 1001 1001 4096 Nov 4 10:54 html

5. А если заглянуть внутрь html папки? какова ваша операционная система хоста?

Ответ №1:

Я нашел ответ. Проблема заключается в синтаксисе командной строки, он должен быть:

 command:
  - certonly
  - --webroot
  - -w
  - /var/www/certbot/html
  - --email={email}
  - --agree-tos
  - --no-eff-email
  - --dry-run
  - -d
  - {domain}