NPM不在Docker镜像php:8.1-fpm-alpine上工作



我有以下Dockerfile:

FROM php:8.1-fpm-alpine
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN apk add --no-cache zip mariadb-client npm && 
docker-php-ext-install mysqli pdo pdo_mysql

它似乎安装正确,但NPM命令什么都不做:

/usr/bin $ which node
/usr/bin/node
/usr/bin $ node -v
v18.9.1
/usr/bin $ which npm
/usr/bin/npm
/usr/bin $ npm -v
/usr/bin $

日志中没有显示任何内容来解释它:

[10-Oct-2022 12:38:52] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[10-Oct-2022 12:38:52] NOTICE: fpm is running, pid 1
[10-Oct-2022 12:38:52] NOTICE: ready to handle connections

当我在运行compose命令之前设置GID/UID时,问题似乎发生了:

export uid=$(id -u)
export gid=$(id -g)
docker compose -f docker/docker-compose.yml --env-file .env up

在我的docker-compose.yml中,我有以下设置:

services:
php:
build: .
container_name: ${COMPOSE_PROJECT_NAME}-php
user: ${uid:-www-data}:${gid:-www-data}
volumes:
- ../:/var/www/html

您要求容器使用它无法识别的用户。您应该首先创建用户:

FROM php:8.1-fpm-alpine
ARG UID
ARG GID
RUN addgroup -S ${GID} && adduser -S ${UID} -G ${GID}
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN apk add --no-cache zip mariadb-client npm && 
docker-php-ext-install mysqli pdo pdo_mysql

docker-compose.yml:

services:
php:
build: 
context: .
args:
- UID=${uid:-www-data}
- GID=${gid:-www-data}
container_name: ${COMPOSE_PROJECT_NAME}-php
user: ${uid:-www-data}:${gid:-www-data}
volumes:
- ../:/var/www/html

然后你可以运行:

export uid=$(id -un)
export gid=$(id -gn)
docker compose -f docker/docker-compose.yml --env-file .env up

最新更新