用Docker以非root用户启动nginx

在容器中运行的进程,如何确保以非root用户运行的备忘录。

针对root用户执行操作的情况。

以下是一个例子:nginx 的 master 进程以 root 用户身份运行,worker 进程以 nginx 用户身份运行。

FROM nginx

COPY ./nginx.conf /etc/nginx/nginx.conf

CMD ["nginx"]
user nginx;
worker_processes 1;
daemon off;

error_log   /var/log/nginx/error.log warn;
pid         /var/run/nginx.pid;

events {
  worker_connections  1024;
  multi_accept on;
}

http {  
  •••

  server {
    listen      80;
    server_name _;
    charset     utf-8;

    location / {
      try_files $uri @app;
    }

    location @app {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://hogehoge.com:3000;
    }

  }
}

使用nginx用户的情况下执行

以下是一个示例,可以确保 Nginx 主进程和工作进程都在 Nginx 用户下运行。

由于nginx用户是在nginx镜像中创建的,因此需要使用它。
基本上,众所周知的端口0〜1023只能由root用户使用,所以如果监听端口是80,就会出现权限错误bind() to 0.0.0.0:80 failed (13: Permission denied)。

监听端口从80更改为8080。

FROM nginx

COPY ./nginx.conf /etc/nginx/nginx.conf

# 追加
# ディレクトリオーナーを変更
RUN touch /var/run/nginx.pid && \
  chown -R nginx:nginx /var/run/nginx.pid && \
  chown -R nginx:nginx /var/cache/nginx

# 追加
# uid=100(nginx) gid=101(nginx) groups=101(nginx)
USER nginx

CMD ["nginx"]
worker_processes 1;
daemon off;

error_log   /var/log/nginx/error.log warn;
pid         /var/run/nginx.pid;

events {
  worker_connections  1024;
  multi_accept on;
}

http {  
  •••

  server {
    # 変更
    listen      8080;
    server_name _;
    charset     utf-8;

    location / {
      try_files $uri @app;
    }

    location @app {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://your-app-domain.com:3000;
    }

  }
}
广告
将在 10 秒后关闭
bannerAds