我正在使用Docker Hub的官方nginx图片: https://hub.docker.com/_/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/" failed (13: Permission denied)
类似的错误
我有一个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
...
答案 0 :(得分:7)
修复你的php-fpm容器并且不要打破好的nginx容器。
这是我的帖子与docker-compose的解决方案(nginx + php-fpm(alpine)):https://stackoverflow.com/a/36130772/1032085
这是我的帖子,带有php-fpm(debian)容器的解决方案: https://stackoverflow.com/a/36642679/1032085
官方php-fpm图片解决方案。创建Dockerfile:
FROM php:5.6-fpm
RUN usermod -u 1000 www-data
答案 1 :(得分:0)
我知道OP要求一种不扩展nginx图像的解决方案,但是我在没有这种约束的情况下就已经登陆了。因此,我将这个Dockerfile
设置为以www-data:www-data
(33:33
)的身份运行nginx:
FROM nginx:1.17
# 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=33
ARG nginx_gid=33
# 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
在映像构建期间,它在命令行上接受uid和gid。制作一个以您当前的用户ID和组ID运行的Nginx图像,例如:
docker build --build-arg nginx_uid=$(id -u) nginx_uid=$(id -g) .
nginx用户和组ID当前在图像中hardcoded to 101:101
。
答案 2 :(得分:0)
另一种选择是从https://github.com/nginxinc/docker-nginx获取源代码并更改docker文件以支持build args Ex:更改buser版本(https://github.com/nginxinc/docker-nginx/blob/master/stable/buster/Dockerfile)的稳定Dockerfile。将nginx用户/组uid / gid设置为构建args
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 \
这种方法比仅执行usermod更为安全,因为如果在其他地方进行了某些操作,例如 chown nginx:nginx将使用GUID / UID设置
答案 3 :(得分:-1)
制作泊坞文件。写在第一行
var str = "this is the .string .needed to .be .tested";
var res = [];
str.replace(/\.(\w+)/g, function(match) {
res.push(match.slice(1))
});
console.log(res);