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: alwaysletsencrypt-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.」
後は覚悟を決めて
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
コマンドで確認
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: alwaysletsencrypt-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-proxyenvironment:
NGINX_PROXY_CONTAINER: nginx-proxy
restart: always
docker-compose stop
docker-compose up -d
を実行
docker下のサイトにアクセスして証明書の期限が伸びているのを確認
理解するのに参考になったのが