Docker撰写引发-adduser:组'www-data'正在使用

ent*_*gra 3 docker docker-compose

我有一个docker-composer.yml可以在几个月前正常工作的文件,但是现在当我运行该文件时会引发错误。

首先,这是我的文件结构。

.data/db
logs
mariadb
nginx
php7-fpm
src/public
.env
.gitignore
README
docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

错误的唯一提及,即www-data在两个文件中。php7-fpm/Dockerfilenginx/Dockerfile

以下是这些文件的内容:

php-fpm / Dockerfile

....
RUN apt-get update && apt-get install -y procps

RUN usermod -u 1000 www-data

USER www-data

WORKDIR /var/www


nginx/Dockerfile

FROM nginx:alpine

COPY ./config/nginx.conf /etc/nginx/
COPY ./sites /etc/nginx/sites-available
RUN apk update \
    && apk upgrade \
    && apk add --no-cache bash \
    && adduser -D -H -u 1000 -s /bin/bash www-data

ARG PHP_UPSTREAM_CONTAINER=php-fpm
ARG PHP_UPSTREAM_PORT=9000

# Set upstream conf and remove the default conf
RUN echo "upstream php-upstream { server     ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
&& rm /etc/nginx/conf.d/default.conf

CMD ["nginx"]
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml文件是通用文件,不会篡改用户组,但是这里是供任何想要查看的人使用的bin。

https://pastebin.com/ivRfPvZz

这是docker-compose up -d命令的部分输出。

.data/db
logs
mariadb
nginx
php7-fpm
src/public
.env
.gitignore
README
docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

您可以看到错误是:

adduser: group 'www-data' in use
Service 'nginx' failed to build: The command '/bin/sh -c apk update     && apk upgrade     && apk add --no-cache bash     && adduser -D -H -u 1000 -s /bin/bash www-data' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

但我不知道该如何解决。

atl*_*ine 5

这个,当你使用FROM nginx:alpine,实际上它使用萨姆斯nginx:1.17.1-alpine,因为它们是相同的图片ID只是不同的标签。

但是几个月前,当您使用时nginx:alpinelatest也许其他人(例如Eg)nginx:1.14.2-alpine,因此当使用相同的dockerfile进行重建时,基本映像确实发生了变化。我强烈建议您使用不是最新的显式标签作为基础图像,以确保确定性。

最后,几个月前发生了什么?

  1. 使用nginx:1.14.2-alpine,也许不是这个版本,仅是示例?

    $ docker run --rm -it nginx:1.14.2-alpine cat /etc/group | grep www-data
    
    Run Code Online (Sandbox Code Playgroud)

    您可以看到www-data图像中没有任何组,因此可以使用next添加一个新用户,以及一个新组,其名称为www-data

    adduser -D -H -u 1000 -s /bin/bash www-data
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用nginx:1.17.1-alpine,目前与nginx:alpine

    $ docker run --rm -it nginx:1.17.1-alpine cat /etc/group | grep www-data
    www-data:x:82:
    
    Run Code Online (Sandbox Code Playgroud)

    您可以看到www-data此映像中有一个默认组,不知道它是如何生成的,总之,映像更新带来了一些不同。

    因此,作为www-data那里的一个组,您要做的就是将命令更改为next,以加入现有的组:

    adduser -D -H -u 1000 -s /bin/bash www-data -G www-data
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

您可以在 laradock/nginx 文件夹中找到 DockerFile。换线就好

&& adduser -D -H -u 1000 -s /bin/bash www-data
Run Code Online (Sandbox Code Playgroud)

&& adduser -D -H -u 1000 -s /bin/bash www-data -G www-data
Run Code Online (Sandbox Code Playgroud)

这指定了用户所属的组。完成后,构建并启动您的容器

docker-compose build --no-cache nginx
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)