首页 > 解决方案 > 如何保持 certbot 容器运行?

问题描述

我正在使用certbot/certbot容器,如下所示:

docker-compose run -d --rm --entrypoint 'certbot certonly --webroot -w /var/www/certbot --staging --email example@domain.se -d example.com --rsa-key-size 4096 --agree-tos --force-renewal ; sleep 3600' certbot

在以下撰写文件上:

version: '3.5'
services:
  nginx:
    image: nginx:1.15-alpine
    restart: unless-stopped
    volumes:
      - "~/dev/docker/projects/common/volumes/letsencrypt/nginx:/etc/nginx/conf.d"
      - "~/dev/docker/projects/common/volumes/letsencrypt/certbot/conf:/etc/letsencrypt"
      - "~/dev/docker/projects/common/volumes/letsencrypt/certbot/www:/var/www/certbot"
      - "~/dev/docker/projects/common/volumes/letsencrypt/nginx:/var/www/nginx"
      - "~/dev/docker/projects/common/volumes/logs:/var/log/nginx"
    ports:
      - "80:80"
      - "443:443"
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - "~/dev/docker/projects/common/volumes/letsencrypt/certbot/conf:/etc/letsencrypt"
      - "~/dev/docker/projects/common/volumes/letsencrypt/certbot/www:/var/www/certbot"
      - "~/dev/docker/projects/common/volumes/logs:/var/log/letsencrypt"
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

但它忽略了 sleep 命令并且容器消失了。

而运行以下:

docker-compose run -d --rm --entrypoint 'sleep 3600' certbot

保持容器正常运行。

我想在certbot失败后保持容器正常运行。

标签: docker-composecertbot

解决方案


您可以"/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"进入专用脚本,例如 start.sh。

使用 docker-compose 卷挂载它

 volumes:
   - "./start.sh:/start.sh
 entrypoint: /start.sh

推荐阅读