はじめに
DockerのNginxをrootlessで構築するときのメモ残しです。
Warnがログに出ていたところを見逃していましたので、その修正対応込みでの記事となります。
ただ、エラーログにnoticeが出ますので、もう少し良い方法があるかもしれません。
確認環境
- WSL2(Ubuntu 22.04.3 LTS)
- Docker 26.0.0
- Docker Compose v2.26.1
- Nginx 1.27.0
フォルダ構成
[projectfolder]
├─ compose.yml
├─ Dockerfile
├─ conf.d
│ └─ default.conf (コンテナからコピー)
├─ log
│ └─ (アクセスログを格納)
└─ html
└─ index.html (表示確認サンプル)
設定ファイルをコンテナからコピーする
# プロジェクトフォルダに移動
cd {projectfolder}
# コンテナを仮立ち上げ
docker run --name nginx-temp -itd nginx:1.27.0
# 設定ファイルをコピー
docker cp nginx-temp:/etc/nginx/conf.d conf.d
# 仮コンテナを削除
docker rm -f nginx-temp
コード
compose.yml
services:
web:
build:
context: .
ports:
# ポート設定
- "80:80"
environment:
# タイムゾーン
TZ: "Asia/Tokyo"
volumes:
# ドキュメントルート
- ./html:/usr/share/nginx/html
# 設定ファイル
- ./conf.d:/etc/nginx/conf.d
# アクセスログ
- ./log:/var/log/nginx
Dockerfile
# Nginx を指定
FROM nginx:1.27
# GID,UID変更(必要があれば)
# RUN groupmod -g 1000 nginx
# RUN usermod -u 1000 nginx
# キャッシュフォルダの所有者を変更
RUN chown -R nginx:nginx /var/cache/nginx/ \
# pidのデフォルト設定場所の所有者を変更
/var/run/ \
# ログフォルダの所有者を変更
/var/log/nginx/
# nginx.conf の先頭行の user nginx; をコメントアウト
RUN sed -i 's/^\(.*user nginx;.*\)$/#\1/' /etc/nginx/nginx.conf
conf.d/default.conf ※差分のみ
- #access_log /var/log/nginx/host.access.log main;
+ access_log /var/log/nginx/access.log main;
html/index.html(確認用ですのでお好きに)
<html>
<h1>IT'S WORKS!!</h1>
</html>
立ち上げコマンド
shell実行
docker compose up -d
※立ち上げ後、ブラウザから localhost
に接続して、index.html
の内容が表示されていたら、OKです
注意点&解説
- GID,UID については、必要があれば変更してください
- nginx.conf のuser nginx; は rootユーザーではないと、できない設定みたいなので、root以外のユーザーで残して実行するとWarningが出てしまいます
- default.conf と記載していますが、末尾が
.conf
であれば読み込んでくれます(複数の場合はルールがあったかと思いますので、調べてください…)
最後に
Warningの内容をAI(Gemini Pro 1.5) に聞くと、原因と解決策をすぐに出してくれましたので、すごく楽でした。とはいえ最近、検索して解決する能力がどんどん落ちてきている気がします😢