如何更改正式docker映像nginx的nginx进程用户?
我正在使用Docker Hub的官方nginx图像: nginx的用户(定义见/etc/nginx/nginx.conf)是如何更改正式docker映像nginx的nginx进程用户?,nginx,docker,Nginx,Docker,我正在使用Docker Hub的官方nginx图像: nginx的用户(定义见/etc/nginx/nginx.conf)是nginx。有没有一种方法可以让nginx作为www-data运行,而不必扩展docker映像?原因是,我有一个共享卷,它由多个容器使用-php fpm,我作为www-data和nginx运行。共享卷中文件/目录的所有者是www-data:www-data,并且nginx无法访问该文件/目录-类似于*1 stat()“/app/frontend/web/”的错误失败(13
nginx
。有没有一种方法可以让nginx作为www-data
运行,而不必扩展docker映像?原因是,我有一个共享卷,它由多个容器使用-php fpm
,我作为www-data
和nginx
运行。共享卷中文件/目录的所有者是www-data:www-data
,并且nginx
无法访问该文件/目录-类似于*1 stat()“/app/frontend/web/”的错误失败(13:权限被拒绝)
我有一个docker compose.yml
并运行所有容器,包括带有docker compose up的nginx容器
...
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./:/app
- ./vhost.conf:/etc/nginx/conf.d/vhost.conf
links:
- fpm
...
制作docker文件。写在最上面一行
From nginx
Then change config
Cmd["nginx"]
供参考
这是php fpm图像的问题
这不是关于用户名,而是关于www数据用户ID
怎么办
修复php fpm容器,不要破坏好的nginx容器
解决
- 这是我的帖子,里面有docker compose的解决方案(nginx+
php fpm(阿尔卑斯山):
- 下面是我的帖子,其中包含php fpm(debian)容器的解决方案:
- 官方php fpm图像解决方案。创建Dockerfile:
FROM php:5.6-fpm
RUN usermod -u 1000 www-data
我知道OP要求提供一个不扩展nginx映像的解决方案,但我在这里没有这个限制。所以我制作了这个Dockerfile
来运行nginx作为www-data:www-data
(33:33
):
在生成映像期间,它在命令行上接受uid和gid。要制作作为当前用户id和组id运行的nginx映像,例如:
docker build --build-arg nginx_uid=$(id -u) nginx_uid=$(id -g) .
nginx用户和组ID当前在映像中。另一个选项是从获取源代码并更改docker文件以支持构建参数,例如更改buser release()的稳定docker文件。将nginx用户/组uid/gid设置为生成参数
FROM debian:buster-slim
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
ENV NGINX_VERSION 1.18.0
ENV NJS_VERSION 0.4.3
ENV PKG_RELEASE 1~buster
#Change NGNIX guid/uid#
ARG nginx_guid=101
ARG nginx_uid=101
RUN set -x \
# create nginx user/group first, to be consistent throughout docker variants
&& addgroup --system --gid $nginx_guid nginx \
&& adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid $nginx_uid nginx \
来自debian:buster slim的
标签维护者=“NGINX Docker维护者”
ENV NGINX_版本1.18.0
ENV NJS_版本0.4.3
环境包发布1~buster
#更改NGNIX guid/uid#
ARG nginx_guid=101
ARG nginx_uid=101
运行集合-x\
#首先创建nginx用户/组,以便在整个docker变体中保持一致
&&addgroup--系统--gid$nginx\u guid nginx\
&&adduser--system--disabled login--ingroup nginx--no create home--home/不存在--gecos“nginx user”-shell/bin/false--uid$nginx\u uid nginx\
这种方法比仅仅使用usermod更安全,因为如果在其他地方(如
chown nginx:nginx它将使用GUID/UID集我认为更好的方法是创建您自己的Dockerfile,这样它是可复制的。您可以登录到容器,更改用户并重新启动容器,但这可能是将来的维护问题。我知道这一点。但我正在寻找一种在运行时(通过env变量或其他方式)完成这项工作的方法。经过数小时的搜索后,我得到了很大的帮助!我建议其他与我有相同问题的人(Docker-nginx-php-fpm组合的权限)注意这里。对于php:rc-fpm-alpine
alpine linux映像,usermod
不存在,因为alpine使用busybox。以下是等效的:运行deluser www-data&&adduser-DH-h/home/www-data-s/sbin/nologin-u 1000 www-data
——希望对使用alpine的人有所帮助。为什么是1000???Nginx容器中的Nginx用户不是1000
,因此如果在尝试运行usermod之前运行alpine Nginx add shadow,则无权读取由php fpm
创建的文件。将上面的usermod行更改为:运行apk add shadow&&usermod-u$nginx\u uid-o nginx&&groupmod-g$nginx\u gid-o nginx
FROM debian:buster-slim
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
ENV NGINX_VERSION 1.18.0
ENV NJS_VERSION 0.4.3
ENV PKG_RELEASE 1~buster
#Change NGNIX guid/uid#
ARG nginx_guid=101
ARG nginx_uid=101
RUN set -x \
# create nginx user/group first, to be consistent throughout docker variants
&& addgroup --system --gid $nginx_guid nginx \
&& adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false --uid $nginx_uid nginx \