dockerで管理していたLet's encryptの証明書(TLS-SNI-01)を最新に更新した

3/15に証明書の期限が切れるということで、dockerのことはよくわからない状態からスタート

利用していたのは

  • jwilder/nginx-proxy
  • jrcs/letsencrypt-nginx-proxy-companion

調べればよく出てくる構成。この下にSSLを使うドメインがぶら下がっている

 

現状の把握

  • docker ps -a 起動しているdockerの一覧の取得

  • docker network ls docker networkの取得
  • docker-compose ps docker-composeで起動している一覧

詳細を見たいなら

  • docker inspect name コンテナの詳細
  • docker network inspect name networkの詳細

色々調べていくと「jwilder/nginx-proxy」「jrcs/letsencrypt-nginx-proxy-companion」の組み合わせは「nginxproxy_default」networkをデフォルトで使うと理解

 

docker-compose.yml を見つけて内容を確認

version: '2'
services:
  nginx-proxy:
  image: jwilder/nginx-proxy
  container_name: nginx-proxy
    ports:
    - 80:80
    - 443:443
    volumes:
    - ./certs:/etc/nginx/certs:ro
    - /etc/nginx/vhost.d
    - /usr/share/nginx/html
    - /var/run/docker.sock:/tmp/docker.sock:ro
   restart: always

letsencrypt-nginx-proxy-companion:
   image: jrcs/letsencrypt-nginx-proxy-companion
   container_name: nginx-letsencrypt
   volumes:
   - ./certs:/etc/nginx/certs
   - /var/run/docker.sock:/var/run/docker.sock:ro
   volumes_from:
   - nginx-proxy
   restart: always

 

nginx-letsencryptのコンテナの中に入ってみる

docker exec -it nginx-letsencrypt bash

中を探しても、certbotはない、どうやらコンテナを新しくする必要がありそうと気付き

github.com起動した後からの履歴を見てみると、TLS-SNI-01の対応したのは1.10付近と推測(HTTP-01)

1.9 released this Aug 12, 2018
1.9.1 released this Sep 30
1.10 released this Jan 8, 2019

とりあえず、先にダウンロードしておいて問題ないから

docker pull jrcs/letsencrypt-nginx-proxy-companion

docker pull jwilder/nginx-proxy

最新を取得する

 

jrcs/letsencrypt-nginx-proxy-companionに気になることが書いてあったのでDNS CAAをあらかじめ設定しておく

「Your DNS provider must answers correctly to CAA record requests.」

blog.apar.jp

後は覚悟を決めて

docke-compose.ymlのあるディレクトリに移動

cd /path/to/dir

docker-composeで起動しているサービスを停止

docker-compose stop
Stopping nginx-letsencrypt ... done
Stopping nginx-proxy ... done

docke-compose 起動

docker-compose up -d
Recreating nginx-proxy ...
Recreating nginx-proxy ... done
Recreating nginx-letsencrypt ...
Recreating nginx-letsencrypt ... done

 無事起動。ぶら下がっているサイトにアクセスも可。証明書の期限は伸びていない!?

 

docker ps -aするとnginx-letsencryptが延々とrestartingと出ている

コンテナにログインしようとしても

docker exec -it nginx-letsencrypt bash

Error response from daemon: Container 6bd1ea10cb646c4236c28086ce4e807d7850f693fdbb6946874b53b6ed16bc0f is restarting, wait until the container is running

 

codenote.net

コマンドで確認

docker logs contena_id

2019/03/08 14:13:36, Error: can't get my container ID !
Error: can't get nginx-proxy container ID !
Check that you are doing one of the following :
- Use the --volumes-from option to mount volumes from the nginx-proxy container.
- Set the NGINX_PROXY_CONTAINER env var on the letsencrypt-companion container to the name of the nginx-proxy container.
- Label the nginx-proxy container to use with 'com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy'.

こんな感じで延々とでていたので、NGINX_PROXY_CONTAINERとは?と思いググると答えが

aroundthedistance.hatenadiary.jpdocker-compose.yml

docker-compose.yml
environment:
NGINX_PROXY_CONTAINER: rg-proxy

 なるほどと思い docker-compose.ymlを下記のように変更

version: '2'
services:
  nginx-proxy:
  image: jwilder/nginx-proxy
  container_name: nginx-proxy
    ports:
    - 80:80
    - 443:443
    volumes:
    - ./certs:/etc/nginx/certs:ro
    - /etc/nginx/vhost.d
    - /usr/share/nginx/html
    - /var/run/docker.sock:/tmp/docker.sock:ro
   restart: always

letsencrypt-nginx-proxy-companion:
   image: jrcs/letsencrypt-nginx-proxy-companion
   container_name: nginx-letsencrypt
   volumes:
   - ./certs:/etc/nginx/certs
   - /var/run/docker.sock:/var/run/docker.sock:ro
   volumes_from:
   - nginx-proxy

   environment:
     NGINX_PROXY_CONTAINER: nginx-proxy
   restart: always

docker-compose stop

docker-compose up -d

を実行

docker下のサイトにアクセスして証明書の期限が伸びているのを確認

 

理解するのに参考になったのが

tech.quartetcom.co.jp

morizyun.github.io

 

docs.docker.jp