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/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"]
Run Code Online (Sandbox Code Playgroud)
该docker-compose.yml文件是通用文件,不会篡改用户组,但是这里是供任何想要查看的人使用的bin。
这是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)
但我不知道该如何解决。
见这个,当你使用FROM nginx:alpine,实际上它使用萨姆斯nginx:1.17.1-alpine,因为它们是相同的图片ID只是不同的标签。
但是几个月前,当您使用时nginx:alpine,latest也许其他人(例如Eg)nginx:1.14.2-alpine,因此当使用相同的dockerfile进行重建时,基本映像确实发生了变化。我强烈建议您使用不是最新的显式标签作为基础图像,以确保确定性。
最后,几个月前发生了什么?
使用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)使用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)
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |