背景
近期使用nginx搭建了一个下载服务器,但是会遇到访问403问题,显而易见,没有权限,下面干货。
分析
nginx镜像启动是nginx用户,挂载的下载目录不是nginx用户,是宿主机用户,比如user01,这就导致nginx在访问该目录时候,没有权限。
解决
没有权限,那就授权。最简单办法就是登录宿主机,给目录授权
理论上授权r即可,但是我操时候还得授予x才可以访问???如有大神,可指教
chmod o+rx 目录
但是每次都去授权,繁琐,而且太low ,想方法能否一劳永逸。nginx镜像默认用户是nginx,如果能改变他的组id和用户id,与user01一致,就可以解决(容器内的用户可以和宿主机的一致,这里不多解释,可自行查找资料了解)
dockerfile
FROM nginx
# Customization of the nginx user and group ids in the image. It's 101:101 in
# the base image. Here we use 33 which is the user id and group id for www-data
# on Ubuntu, Debian, etc.
ARG nginx_uid=101
ARG nginx_gid=101
# The worker processes in the nginx image run as the user nginx with group
# nginx. This is where we override their respective uid and guid to something
# else that lines up better with file permissions.
# The -o switch allows reusing an existing user id
RUN usermod -u $nginx_uid -o nginx && groupmod -g $nginx_gid -o nginx
如果目录所属不是当前用户,就在dockerfile里面写死uid和gid,直接build;如果是当前用户,可以执行下面命令重新build
docker build --build-arg nginx_uid=$(id -u) nginx_uid=$(id -g) -t nginx:v1 .