[小ネタ]Dockerのnginxコンテナ内で設定更新する


背景

docker-compose でローカル開発している中で、nginxの設定(nginx.conf)を変更した後にコンテナ内部で

コンテナ内部
service nginx restart

したらコンテナが終了してしまった。

結論

コンテナ内部
service nginx reload

で対応すると終了しない。restart だとnginxのプロセスが終わるので処理が終わったとみなされるという事かな。
もちろんDockerコンテナ再起動するのが王道。

ホスト
# 最後のnginxはコンテナ名でなく、サービス名
docker-compsose restart nginx

でも細かくいろいろやりたい時とかにコンテナ再起動までしたくないケースで使えるかと。

再現テスト

docker-compose.yml
version: '3.7'
services:
  nginx:
    image: nginx
    restart: always
    ports:
      - 8880:80
    container_name: nginx-test
起動
sudo docker-compose up
コンテナログイン
sudo docker exec -it nginx-test bash
コンテナ内部
service nginx restart

上記docker-compose.ymlではrestartつけてるのですぐ起動しますが、一旦は終了してコンテナからはログアウトされます。再度コンテナログインが必要です。

コンテナ内部
service nginx reload

今度はコンテナ終了しません。