Docker compose throws - adduser: используется группа 'www-data' - PullRequest
3 голосов
/ 09 июля 2019

У меня есть файл docker-composer.yml, который пару месяцев назад работал нормально, но теперь, когда я запускаю, он выдает ошибку.

Во-первых, это моя файловая структура.

.data/db
logs
mariadb
nginx
php7-fpm
src/public
.env
.gitignore
README
docker-compose.yml

Единственное упоминание об ошибке, т.е. www-data, содержится в двух файлах. php7-fpm/Dockerfile и nginx/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"]

Файл docker-compose.yml является общим, нет вмешательства в группы пользователей, но здесь есть пастин для всех, кто хочет взглянуть.

https://pastebin.com/ivRfPvZz

Это частичный вывод команды docker-compose up -d.

Image for service php-fpm was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Building nginx
Step 1/8 : FROM nginx:alpine
alpine: Pulling from library/nginx
Digest: sha256:17bd1698318e9c0f9ba2c5ed49f53d690684dab7fe3e8019b855c352528d57be
Status: Downloaded newer image for nginx:alpine
 ---> ea1193fd3dde
Step 2/8 : COPY ./config/nginx.conf /etc/nginx/
 ---> 65c115482d37
Step 3/8 : COPY ./sites /etc/nginx/sites-available
 ---> 1fbe81620355
Step 4/8 : RUN apk update     && apk upgrade     && apk add --no-cache bash     && adduser -D -H -u 1000 -s /bin/bash www-data
 ---> Running in c631ccdf63f2
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
v3.9.4-61-g22a1991b6a [http://dl-cdn.alpinelinux.org/alpine/v3.9/main]
v3.9.4-57-gb40ea6190b [http://dl-cdn.alpinelinux.org/alpine/v3.9/community]
OK: 9776 distinct packages available
(1/1) Upgrading libbz2 (1.0.6-r6 -> 1.0.6-r7)
OK: 27 MiB in 37 packages
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/2) Installing readline (7.0.003-r1)
(2/2) Installing bash (4.4.19-r1)
Executing bash-4.4.19-r1.post-install
Executing busybox-1.29.3-r10.trigger
OK: 29 MiB in 39 packages
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

Вы видите ошибку:

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

но я не знаю, как это исправить.

1 Ответ

4 голосов
/ 10 июля 2019

См. это , когда вы используете FROM nginx:alpine, фактически оно совпадает с nginx:1.17.1-alpine, потому что это просто разные теги для одного и того же идентификатора изображения.

Но несколько месяцев назад, когда вы используете nginx:alpine, latest, может быть, другие, например, nginx:1.14.2-alpine, поэтому при повторной сборке с использованием того же файла docker базовый образ действительно изменился. Я настоятельно рекомендую вам использовать явный тег, который не является последним, в качестве базового изображения для обеспечения определенности.

Наконец, что случилось несколько месяцев назад?

  1. Используйте nginx:1.14.2-alpine, возможно, не эту версию, просто пример:

    $ docker run --rm -it nginx:1.14.2-alpine cat /etc/group | grep www-data
    

    Вы можете видеть, что на изображении нет группы www-data, поэтому вы можете использовать рядом, чтобы добавить нового пользователя и новую группу с именем www-data:

    adduser -D -H -u 1000 -s /bin/bash www-data
    
  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:
    

    Вы можете видеть группу по умолчанию www-data на этом изображении, не знаю, как она генерирует, одним словом, обновление изображения приносит какую-то разницу.

    Итак, как уже существующая группа www-data, вам нужно изменить команду на следующую, чтобы присоединиться к существующей группе:

    adduser -D -H -u 1000 -s /bin/bash www-data -G www-data
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...